此程序实现了浏览器通过IP地址和端口访问HTTP服务器,服务器简单做出回应,是根据TCP服务器程序改编的,用VC++6.0编译后,使用Google浏览器访问,能达到预期效果。由于HTTP协议是由TCP协议而来,此程序就是用TCP程序作了简单改变,缺少众多请求处理过程。
#include
#include
#pragma comment(lib,"WS2_32") int main() { WSADATA swadata; WORD sockVersion=MAKEWORD(2,0);//winsock的版本2.0 WSAStartup(sockVersion,&swadata);//加载WInsock库,swadata返回库的信息 //创建套接字 SOCKET s=::socket(AF_INET,SOCK_STREAM,0); if(s==-1) { printf("Creat scoket is failed!\n"); ::WSACleanup(); system("pause"); return 0; } //填充socaddr_in结构 sockaddr_in sin; sin.sin_family=AF_INET; sin.sin_port=htons(8866);//1024--65535的端口号 sin.sin_addr.S_un.S_addr=INADDR_ANY; //绑定这个套接字到本地地址 if(::bind(s,(SOCKADDR*)&sin,sizeof(sin))==SOCKET_ERROR) { printf("bind is failed!\n"); ::WSACleanup(); system("pause"); return 0; } //监听模式 if(::listen(s,2)==SOCKET_ERROR) { printf("listen is failed!\n"); ::WSACleanup(); system("pause"); return 0; } printf("正在监听....\n"); //循环接受连接请求 sockaddr_in addrlink; int Len=sizeof(addrlink); char anser[]="HTTP/1.1 200 OK\r\n\r\n
yours \r\n"; char buf[1024]; SOCKET client; while(1) { client=::accept(s,(SOCKADDR*)&addrlink,&Len); if(client==INVALID_SOCKET) { printf("accept is failed!"); continue; } int n; while((n=::recv(client,buf,1024,0))==0); buf[n]='\0'; printf("客户:(%s)",inet_ntoa(addrlink.sin_addr)); printf("\n%s\n",buf); ::send(client,anser,strlen(anser),0); } ::closesocket(client); ::closesocket(s); ::WSACleanup(); return 0; }


发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217122.html原文链接:https://javaforall.net
