sad*_*605 7 c sockets http httpserver
我正在使用这样的东西来创建一个使用C的服务器.当我127.0.0.1:5000从浏览器访问时,我可以看到"Hello Worlds"我将其作为缓冲区发送.但我想127.0.0.1:5000/filename.html工作.但我不知道如何在C filename之后得到它127.0.0.1:5000.
我正在使用它来建立连接:
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(5000);
bind(listenfd, (struct sockaddr*)&serv_addr,sizeof(serv_addr));
connfd = accept(listenfd, (struct sockaddr*)NULL ,NULL);
Run Code Online (Sandbox Code Playgroud)
浏览器将向您的服务器发送一个HTTP请求,其中包含以后的URL.请求可能如下所示:
GET /filename.html HTTP/1.1
Host: 127.0.0.1:5000
Run Code Online (Sandbox Code Playgroud)
您的C程序必须从套接字读取此请求并解析它以查找URL.请注意,请求可能包含比上述更多的信息,但它应始终以空行结束(因此您知道停止解析的位置).HTTP请求中的行应以回车符和换行符("\r\n")结束.
您通过用于发送数据的同一套接字接收数据.读取HTTP请求的步骤可能是这样的:
声明一个足够大小的缓冲区,可能是4096字节或更多.
使用read和connfd直到:将数据读入此缓冲区:
收到缓冲区中的HTTP请求后,解析它:
第一行是请求行,它指示请求的方法,URI和协议版本号.解析此行的一种可能方法是按空格分割.
后续行表示HTTP头字段,通常可以解析为Key: Value\r\n.这些标题字段包含cookie,有关发出请求的客户的信息等.
您还需要形成HTTP 响应.URI指定有效资源(例如filename.html)时的响应可能是:
HTTP/1.1 200 OK
Date: Thu, 25 Jul 2013 03:55:00 GMT
Server: sadaf2605-server/1.0
Content-Type: text/html
Content-Length: 40595
< contents of filename.html follows here >
Run Code Online (Sandbox Code Playgroud)
在上面,Content-Length指的是filename.html文件中的字节数.就像请求一样,使用空行将响应与数据分开.
| 归档时间: |
|
| 查看次数: |
3111 次 |
| 最近记录: |