#include <Winsock2.h>#include <stdio.h>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );//載入Ws2_32.dllerr = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {return;}if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1) {WSACleanup( );return;}SOCKET SocketSrv=socket(AF_INET,SOCK_STREAM,0 );//step1 建立通訊端 SOCKADDR_IN AddrSrv; AddrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//網路位元組序 AddrSrv.sin_family=AF_INET;AddrSrv.sin_port=htons(6000);//連接埠號碼兩個位元組bind(SocketSrv,(SOCKADDR *)&AddrSrv,sizeof(SOCKADDR));//step2 綁定到通訊端listen(SocketSrv,5);//step3 監聽串連請求 5為隊列長度 SOCKADDR_IN AddrClient; int len=sizeof(SOCKADDR);//必須賦初值//伺服器端程式迴圈運行while(1){SOCKET ScoketConn=accept(SocketSrv, (SOCKADDR*)&AddrClient, &len);//step4 接受請求 AddrClient接收串連請求方的資訊char SendBuf[100];sprintf(SendBuf,"Wellcome! Connect from %s Success!",inet_ntoa(AddrClient.sin_addr));send(ScoketConn,SendBuf,strlen(SendBuf)+1,0);//step5 發送資料用串連的通訊端 不能用處於監聽狀態的通訊端char RecvBuf[100];recv(ScoketConn,RecvBuf,100,0);//step5 接收資料printf("%s\n",RecvBuf);closesocket(ScoketConn);}//實際上還需做以下操作 但上述是死迴圈因此沒有執行下述操作 closesocket(SocketSrv);//關閉通訊端 WSACleanup();//終止庫引用}#include <Winsock2.h>#include <stdio.h>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {return;}if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1) {WSACleanup( );return;}SOCKET SocketClient=socket(AF_INET,SOCK_STREAM,0 );//step1 建立通訊端SOCKADDR_IN AddrSrv;AddrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//本地迴路地址AddrSrv.sin_family=AF_INET;AddrSrv.sin_port=htons(6000);connect(SocketClient,(SOCKADDR *)&AddrSrv,sizeof(SOCKADDR));//step2 串連請求char RecvBuf[100];recv(SocketClient,RecvBuf,100,0);//接收伺服器資料printf("%s\n",RecvBuf);char sendbuf[100];sprintf(sendbuf,"this is from %s","linsheng");send(SocketClient,sendbuf,strlen(sendbuf)+1,0);//發送資料closesocket(SocketClient);//關閉通訊端 釋放資源WSACleanup();//終止通訊端庫的引用}