偶然看到一个简单可用的socket通信示例程序,借助winsock静态库的功能,代码风格很类似linux下的套接口编程
原文链接http://www.cnblogs.com/karying/archive/2009/12/14/2015391.html
服务器端
#include<WinSock2.h> #include<stdio.h> #pragma comment(lib,"ws2_32.lib") void main() { WORD wVersionRequested; WSADATA wsaData; int err; /* * 加载指定版本的socket库文件 */ wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup(); return; } /* * 初始化网络套接口 */ SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); /* * 等待通信 */ while (1) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendbuffer[100]; sprintf(sendbuffer,"Welcome %s here",inet_ntoa(addrClient.sin_addr)); send(sockConn,sendbuffer,strlen(sendbuffer)+1,0); char recvchar[100]; recv(sockConn,recvchar,100,0); printf("%s\n",recvchar); closesocket(sockConn); } }
客户端
#include<WinSock2.h> #include<stdio.h> #pragma comment(lib,"ws2_32.lib") void main() { WORD wVersionRequested; WSADATA wsaData; int err; /* * 加载指定版本的socket库文件 */ wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup(); return; } /* * 初始化网络套接口 */ SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); /* * 设置发送超时时间和接收超时时间 */ int TimeOut=6000; if(::setsockopt(sockClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){ return; } TimeOut=6000; if(::setsockopt(sockClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){ return; } /* * 设置非阻塞 */ //unsigned long ul = 1; //err = ioctlsocket(sockClient, FIONBIO, (unsigned long*)&ul); //if(err==SOCKET_ERROR)return; 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(sockClient,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR)); /* * 通信 */ char recvBuffer[100]; recv(sockClient,recvBuffer,100,0); printf("%s\n",recvBuffer); send(sockClient,"This is Kary",strlen("This is Kary")+1,0); closesocket(sockClient); WSACleanup(); }