"Stdafx.H" : #Include #Include Typedef Struct
"Stdafx.H" : #Include #Include Typedef Struct
h> typedef struct _CLIST { SOCKET c; SOCKADDR_IN addr; int addrlen; char* buf; char* ret; _CLIST* next; HANDLE hReady; }CLIST; SOCKADDR_IN serverAddr; SOCKET s; WSADATA wsaData; DWORD ThreadID; CLIST* pClients = NULL; DWORD WINAPI SendingThread(LPVOID param) { CLIST* p = (CLIST*)param; while (1) { WaitForSingleObject(p->hReady,INFINITE); send(p->c,p->ret,strlen(p->ret),0); Sleep(1); } return 0; } DWORD WINAPI RecvingThread(LPVOID param) { CLIST* p = (CLIST*)param; p->buf = (char*)calloc(1024,1); p->ret = (char*)calloc(1024,1); while (1) { ResetEvent(p->hReady); recv(p->c,p->buf,1024,0); int a,b,c; sscanf(p->buf,"%d%d",&a,&b); c = a + b; memset(p->ret,0,1024); sprintf(p->ret,"%d\n",c); SetEvent(p->hReady); Sleep(1); } return 0; } DWORD WINAPI ListeningThread(LPVOID param) { pClients = (CLIST*)calloc(1,sizeof(CLIST));
while (1) { pClients->addrlen = sizeof(pClients->addr); pClients->c = accept(s,(sockaddr*)&pClients->addr,&pClients->addrlen); pClients->hReady = CreateEvent(NULL,TRUE,FALSE,NULL); CreateThread(NULL,0,SendingThread,pClients,0,&ThreadID); CreateThread(NULL,0,RecvingThread,pClients,0,&ThreadID); pClients->next = (CLIST*)calloc(1,sizeof(CLIST)); pClients = pClients->next; } return 0; } int main(int argc, char* argv[]) { WSAStartup(MAKEWORD(2,2),&wsaData); serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(atoi(argv[1])); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); bind(s,(sockaddr*)&serverAddr,sizeof(serverAddr)); listen(s,10); WaitForSingleObject(CreateThread(NULL,0,ListeningThread,NULL,0,&ThreadID), INFINITE); return 0; }