自己动手写web服务器一(浏览器的访问信息)
2.輸入請求的頁面。 GET? /?? HTTP/1.0 或者 GET /index.html? HTTP/1.0
?? get:表示使用的get方法來獲取網站的內容了
??? /:表示請求的為根目錄,默認文件(有網站的配置文件決定)。 /index.html表示網站根目錄下的index.html文件
? HTTP/1.0:表示使用的是HTTP1.0的協議
三個參數用空格分開
3.apache返回的結果上面是一個http協議一個交互的協議,如果要深入了解請上網查找資料。
下面我們自己寫一個程序看一下當瀏覽器連接的時向web服務器發送的信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#define MAX 1024
//監聽指定ip的端口
int socket_listen( char *ip, unsigned short int port)
{
?int res_socket, res, on;
?struct sockaddr_in address;
?struct in_addr in_ip;
?res = res_socket = socket(AF_INET, SOCK_STREAM, 0);
?setsockopt(res_socket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
?memset(&address, 0, sizeof(address));
?address.sin_family = AF_INET ;
?address.sin_port =htons(port);
?address.sin_addr.s_addr = htonl(INADDR_ANY); //inet_addr("127.0.0.1");
?res = bind( res_socket, (struct sockaddr *) &address, sizeof( address ) );
?if(res) { printf( "port is used , not to repeat bind\n" ); exit(101); };
?res = listen(res_socket,5);
?if(res) { printf( "listen port is error ;\n" ); exit( 102 );? };
?return res_socket ;
}
int main(int argc, char * argv[] )
?{?
?int res_socket, conn_socket;
?int tmp ;
?struct sockaddr_in client_addr;
?char buf[MAX];
?int len = sizeof(client_addr);
?res_socket = socket_listen( "127.0.0.1", 1024) ;
?while(1)
?{
??conn_socket = accept( res_socket, (struct sockaddr * )&client_addr, &len );
??printf("webbrower information\n\n");
??//接受來自瀏覽器的信息
??while(0 == (tmp = read( conn_socket, buf, MAX-1) ) || tmp != EOF )
??{
???buf[MAX-1]=0;
???printf("%s\n", buf);
???break;
???}?
??close(conn_socket);
? ?}
}
下面為接收到的信息。
轉載自:http://m.blog.csdn.net/blog/rentiansheng/8068960
總結
以上是生活随笔為你收集整理的自己动手写web服务器一(浏览器的访问信息)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: urllib2打开URL(含中文)的问题
- 下一篇: 使用HTML5的十大原因