写一个socket客户端程序访问正常.用telent访问也正常,但是浏览器作为客户端访问直接报错,压根不会进入while循环中,这是为啥?
浏览器访问127.0.0.1:8899
服务端程序直接退出,报了一行错误:Segmentationfault(核心已转储)
服务端代码大概长下面这样
intmain(intargc,char*argv[]){if(argc!=2){err_msg("Usage:./studyHttpd\n");}structsockaddr_inserver_sock,client_sock;intsockfd,client_fd;intsin_size;pthread_tntid;if(-1==(sockfd=socket(AF_INET,SOCK_STREAM,0)))err_exit("socket");printf("Socketid=%d\n",sockfd);server_sock.sin_family=AF_INET;server_sock.sin_port=htons(PORT);server_sock.sin_addr.s_addr=INADDR_ANY;bzero(&(server_sock.sin_zero),8);inti=1;setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));if(-1==bind(sockfd,(structsockaddr*)&server_sock,sizeof(structsockaddr)))err_exit("bind");printf("Bindsuccess\n");if(-1==listen(sockfd,MAX_QUE_CONN_NM))err_exit("listen");printf("Listeningport=%d\n",PORT);sin_size=sizeof(client_sock);/*在浏览器根本不会执行到这一步,其他做客户端正常*/while(1){if(-1==(client_fd=accept(sockfd,(structsockaddr*)&client_sock,&sin_size)))err_exit("accept");if(pthread_create(&ntid,NULL,(void*)handle,&client_fd)!=0)err_exit("pthread_create");}close(sockfd);return0;}
浏览器走的是http协议socket一般走的是tcp/ip协议
http协议有特殊的报文头,没有的话当然访问不了