#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);
}
}
TCP 多线程服务端
最新推荐文章于 2024-10-11 15:42:28 发布