您的位置:程序门 -> linux/unix社区 -> 程序开发区



用socket写一个简单的http server


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


用socket写一个简单的http server
发表于:2007-09-21 05:08:40 楼主
我在写作业,用socket写一个简单的http   server
请问该用什么函数来获得用户的请求?

例如用户用   wget,   我怎么获得它的packet?
发表于:2007-09-21 08:13:091楼 得分:0
实际上http   就是简单的文本传输,你打开个端口,在上面侦听,接收到新的请求后就去读取数据,根据要求回发数据.
如此而已.

read
size_t   recv(int   s,   void   *buf,   size_t   len,   int   flags);

ssize_t   recvfrom(int   s,   void   *buf,   size_t   len,   int   flags,   struct   sockaddr   *from,   socklen_t   *fromlen);

ssize_t   recvmsg(int   s,   struct   msghdr   *msg,   int   flags);

这些都可以读取客户端的请求数据.
发表于:2007-09-21 09:44:472楼 得分:0
就跟普通的socket通信差不多的
发表于:2007-09-21 10:58:013楼 得分:0
这就要涉及到"协议"的问题.

服务器/客户端两边必须要建立一个协议才能使请求/应答满足要求.

比如客户端send过去一个1,   根据协议,   1对应的是向服务器要授权文件.   那么此时客户端在发送1之后,   就会打开一个recv接收授权文件,   服务器在收到1之后就会发送授权文件,   这样就完成了一次请求和应答.

当然,   服务器端需要一个进程负责分析请求,   它一直阻塞在socket,   接收客户端的请求.
发表于:2007-09-21 13:18:284楼 得分:0
客户端按照http协议使用send发送请求,你用accept去捕捉连接服务请求,然后生成新的socket,利用这个socket利用send向客户端回传数据就是了。
http协议字符串如下所示(这里使用get方法,参数自己改):

sprintf(strrequest,   "get   %s   http/1.0\r\n%s\r\n%s\r\n%s\r\n%s       \r\n\r\n",   strhostaddr,
                                        "pragma:no-cache",
                                        "accept-encoding:gzip",
                                        "connection:close",
                                        "user-agent:   mozilla/4.0   (compatible;   msie   5.5;   windows   nt5)"
                );

发表于:2007-09-21 13:38:375楼 得分:0
请参考周老师的“linux网络编程一步一步学-编写一个http协议的目录浏览和文件下载服务器”
http://zhoulifa.bokee.com/6069209.html


这个对你应该会有帮助的。。。
发表于:2007-09-21 13:46:596楼 得分:0
ding
发表于:2007-09-21 20:46:107楼 得分:0
学习
发表于:2007-09-23 20:15:558楼 得分:0
对于套接字的数据内容是比较简单的,完成http头的解析即可,关键是套接字需要遵从http协议相关规定,rfc能看头晕,不过估计能实现部分功能就可以了


快速检索

最新资讯
热门点击