代码开源(4)——Windows 中CS简单实现

来源:互联网 发布:国学书院知乎 编辑:程序博客网 时间:2024/05/07 05:18

         下面两段代码介绍Windows中,TCP/IP的建立过程,只是一个最简单的实现。VS2008中测试通过。

          服务器端:

#include<winsock.h>#include<stdio.h>#pragma comment(lib,"wsock32.lib")int main(){//请求版本WORD wVersionRequested;  //Window Socket版本WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 ); //高位为副版本,请求1.1版本err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ){ return 1; }    //找不到合适版本if(LOBYTE( wsaData.wVersion)!= 1 ||        HIBYTE(wsaData.wVersion) != 1) {WSACleanup();return 1; }//创建套接字socketSOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); //创建套接字    SOCKADDR_IN addrSrv;addrSrv.sin_family=AF_INET;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换为网络顺序addrSrv.sin_port=htons(5001);    //绑定bindif(bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) < 0){printf("bind failed\n");return 1;}//监听listen    listen(sockSrv, 5); SOCKADDR_IN  addrClient;while(true){int len=sizeof(SOCKADDR);char sendBuf[100];char recvBuf[100];//用sockConn与客户端通信SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);sprintf(sendBuf,"Welcome %s to seu",inet_ntoa(addrClient.sin_addr));    send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);recv(sockConn, recvBuf, 100, 0);printf("%s\n", recvBuf);closesocket(sockConn);}return 0;}

         客户端:

#include<winsock.h>#include<stdio.h>#pragma comment(lib,"wsock32.lib")int main(){//请求版本WORD wVersionRequested;  //Window Socket版本WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );   //高位为副版本,请求1.1版本err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ){ return 1; }           //找不到合适版本if(LOBYTE( wsaData.wVersion)!= 1 ||        HIBYTE(wsaData.wVersion) != 1) {WSACleanup(); return 1; }char ip[] = "127.0.0.1";int port = 5001;SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);         //创建套接字    SOCKADDR_IN addrSrv;addrSrv.sin_family = AF_INET;                              //使用因特网addrSrv.sin_addr.S_un.S_addr = inet_addr(ip);              //服务器IP地址addrSrv.sin_port = htons(port);                            //服务器端口if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) < 0){printf("connect failed\n");return 1;}char recvBuf[100];recv(sockClient,recvBuf,100,0);  //接受数据printf("%s\n",recvBuf);          //打印收到的数据send(sockClient, "hello seu!", strlen("hello seu!") + 1, 0); //发送数据Sleep(5000);closesocket(sockClient);         //关闭套接字    WSACleanup();return 0;}


原创粉丝点击