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);    }}


原创粉丝点击