C++ Socket 多线程

    技术2022-05-19  20

    client.cpp

    #include <windows.h>#include <iostream>#pragma comment(lib, "ws2_32")

    #define LEN          1024#define TRUE            1#define FALSE_F           -1#define OK              1#define ERROR_R         -1

    int main(){    int          i=100;    int             ret;    char         buf1[LEN];    char         buf[LEN];    WORD            wdVersionRequired;    WSADATA         wsaData;    memset(buf, 0, sizeof(buf));    memset(buf1, 0, sizeof(buf1));

    wdVersionRequired = MAKEWORD(2, 2);   /* 2.2°汾 */WSAStartup(wdVersionRequired, &wsaData);

        while(i--)    {        SOCKET              sock;        sockaddr_in      saServer;

            sock = socket(AF_INET, SOCK_STREAM, 0);        if (SOCKET_ERROR == sock)        {            return FALSE;        }

         memset(&saServer, 0, sizeof(saServer));     saServer.sin_family = AF_INET;     saServer.sin_addr.S_un.S_addr = inet_addr("192.168.2.80");     saServer.sin_port = htons(8066);

         if(connect(sock, (const sockaddr*)&saServer, sizeof(sockaddr)) != 0)     {     printf("connect error/n");     }

            memset(buf, 0, sizeof(buf));        strcpy(buf, "hello world");

            if(0 == send(sock, buf, strlen(buf), 0))         {            printf("send error/n");            break;        }        ret = recv(sock, buf1, sizeof(buf1), 0);

            buf1[ret]='/0';        printf("buf1: %s/n/n", buf1);     closesocket(sock);    }

    WSACleanup();return 1;}

    ================================================/*******************************server.cpp********************************/#include <iostream>#include <winsock2.h>#pragma comment(lib, "ws2_32")

    #define LEN          1024#define OK              1#define ERROR_R         -1#define FALSE           0#define TRUE            1

    DWORD WINAPI AnswerThread(LPVOID lparam) {

        int                 err;    char                buf[32]="";     char                recvbuf[32]="yes receive!!";     SOCKET              ClientSocket=(SOCKET)(LPVOID)lparam;

    // memset(recvbuf, 0, sizeof(recvbuf));    memset(buf, 0, sizeof(buf));

        err = recv(ClientSocket, buf, sizeof(buf), 0);    send(ClientSocket, recvbuf, strlen(recvbuf), 0);    buf[err]='/0';    printf("revc: %s/n", buf);    closesocket(ClientSocket);    return OK; }

    int main(){    int        err;    SOCKET       sock;    SOCKET       sClient;     DWORD               dwThreadId;     WORD                wdVersionRequired;      HANDLE              hThread;    WSADATA             wsaData;    sockaddr_in         saServer, cli_addr;    int                 len = sizeof(cli_addr);

    wdVersionRequired = MAKEWORD(2, 2); //³ÌÐòҪʹÓÃ2.2°æ±¾//×¢Ò⺯Êý·µ»ØÖµ£¬0±íʾÕý³£if ((err = WSAStartup(wdVersionRequired, &wsaData)) != 0)// ³õʼ»¯WinSock¿â¡£        return FALSE;

    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)    {   printf(" create socket error/n");    }

    saServer.sin_family = AF_INET;saServer.sin_addr.S_un.S_addr = inet_addr("192.168.2.80");saServer.sin_port = htons(8066);

    if ((err = bind(sock, (const sockaddr *)&saServer, sizeof(sockaddr)))!= 0)    {        printf("failed bind/n");         }

    if ((err = listen(sock, 100)) != 0)//listen()¼àÌý     {        printf("failed listen/n");    }

        while(1)    {        sClient = accept(sock, (struct sockaddr*)&cli_addr, &len);        Sleep(1000);        hThread=CreateThread(NULL,NULL, AnswerThread,(LPVOID)sClient, 0, &dwThreadId);         if(hThread==NULL)                printf("CreatThread AnswerThread() failed./n");         else             printf("CreateThread OK./n");     }    closesocket(sock);WSACleanup();

    return TRUE;}


    最新回复(0)