TCP 多线程服务端
来源:互联网 发布:红米手机怎么清空数据 编辑:程序博客网 时间:2024/06/04 18:57
#include <Winsock2.h>#include <stdio.h>struct THREADDATA{ SOCKET * sock; SOCKADDR_IN * addr;};DWORD WINAPI ConnProc(LPVOID lpParameter){ THREADDATA temp; temp.addr = ((THREADDATA *)lpParameter)->addr; temp.sock = ((THREADDATA *)lpParameter)->sock; while(1) { char recvBuff[200]; if( recv(*(temp.sock), recvBuff, 200, 0)==-1) break; if( strcmp( recvBuff,"88") ==0){ send(*(temp.sock), "88", strlen("88")+1, 0); break; } printf("%s说: %s/n", inet_ntoa(temp.addr->sin_addr) , recvBuff); //char sendBuff[200]="服务工作人员离开,暂时无法回复..."; //send(*(temp->sock), sendBuff, strlen(sendBuff)+1, 0); } printf("%s离线/n", inet_ntoa(temp.addr->sin_addr)); closesocket(*(temp.sock)); delete temp.addr; delete temp.sock; return 0;}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 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(8000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,5); THREADDATA ThreadData; SOCKADDR_IN * addrClient; int len=sizeof(SOCKADDR); while(1) { addrClient = new SOCKADDR_IN; SOCKET * sockConn = new SOCKET; //printf("等待连接.../n"); *sockConn = accept(sockSrv,(SOCKADDR*)addrClient, &len); printf("%s登陆,等待他发送数据.../n", inet_ntoa(addrClient->sin_addr)); ThreadData.addr = addrClient; ThreadData.sock = sockConn; HANDLE Thandle = CreateThread(NULL, 0, ConnProc, (LPVOID)&ThreadData, 0, NULL); CloseHandle(Thandle); }}