#include <WinSock2.h> #include <stdio.h> #include <windows.h> DWORD ServerRoutine(LPVOID lpParam); #pragma comment(lib,"Ws2_32.lib") #define IP "127.0.0.1" #define PORT 3333 static int counter = 1; int main() { //declare varible WSADATA ws; SOCKET local,acceptSocket; sockaddr_in localAddr; unsigned int unAddrLen = sizeof(localAddr); int nRet; ///init WSAStartup(MAKEWORD(2,2),&ws); local = socket(AF_INET,SOCK_STREAM,0); if(local == INVALID_SOCKET) { return -1; } localAddr.sin_addr.s_addr = inet_addr(IP); localAddr.sin_family = AF_INET; localAddr.sin_port = htons(PORT); memset(localAddr.sin_zero,0,sizeof(localAddr.sin_zero)); nRet = bind(local,(sockaddr *)&localAddr,unAddrLen); if(nRet) { return -2; } listen(local,5); while(1) { acceptSocket = accept(local,(sockaddr *)&localAddr,(int *)&unAddrLen); if(acceptSocket != INVALID_SOCKET) { CreateThread(NULL,0,(LPTHREAD_START_ROUTINE )ServerRoutine,&acceptSocket,0,NULL); } } if(local) { closesocket(local); } if(acceptSocket) { closesocket(acceptSocket); } return 0; } DWORD ServerRoutine(LPVOID lpParam) { counter ++; SOCKET s =* (SOCKET *)(lpParam); int nRet ; char num[10] = ""; char buf[1024]="hello world! coming from server!"; itoa(counter,num,10); strcat(buf,num); while(1) { nRet = send(s,buf,strlen(buf)+1,0); Sleep(500); } return 0; }
client 代码:
#include <WinSock2.h> #include <stdio.h> #include <windows.h> #pragma comment(lib,"Ws2_32.lib") #define IP "127.0.0.1" #define PORT 3333 int main() { //declare varible WSADATA ws; SOCKET server; sockaddr_in serverAddr; unsigned int unAddrLen = sizeof(serverAddr); int nRet; ///init WSAStartup(MAKEWORD(2,2),&ws); server = socket(AF_INET,SOCK_STREAM,0); if(server == INVALID_SOCKET) { return -1; } serverAddr.sin_addr.s_addr = inet_addr(IP); serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(PORT); memset(serverAddr.sin_zero,0,sizeof(serverAddr.sin_zero)); //nRet = bind(server,(sockaddr *)&serverAddr,unAddrLen); //int n = WSAGetLastError(); //if(nRet) //{ // return -2; //} nRet = connect(server,(sockaddr *)&serverAddr,int(unAddrLen)); if(nRet) { return -3; } char buf[1024]=""; while(1) { memset(buf,0,1024); nRet = recv(server,buf,sizeof(buf),0); printf("%s ",buf); Sleep(1000); } closesocket(server); return 0; }
counter 记录了客户端的个数,listen的队列长度为 5。
看截图:事实上可以更多我试过超过12的