自己动手写web服务器一(浏览器的访问信息)

       要协议一个web服务器,需要了解http协议,下面我们来看一下当浏览器请求网张的时候向web服务器发送的数据,我使用的是ubuntu 中telent展现一个下过程。
       我需要一个简单的网站来演示一下,我装了一个apache。来完成成这个过程。下面为过程展示。   

其实,访问一个网站就是浏览器web服务器指定端口发送信息,然后,web服务器向浏览器发送网页的内容,

1。使用telnet连接网站

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);
   }

}

下面为接收到的信息。

 

今天到这里结束了,

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值