我使用 C++ 和 Winsock2 来创建服务器和客户端应用程序。它目前通过创建单独的线程来处理多个客户端连接。
两个客户端连接到服务器。两者都连接后,我只需要向连接的第一个客户端发送一条消息,然后等到收到响应后,再向第二个客户端发送一条单独的消息。问题是,我不知道如何定位第一个连接的客户端。 我目前拥有的代码接受两个连接,但消息被发送到客户端 2。
有人可以给我一些关于如何将 Send() 用于特定客户的想法吗?谢谢
接受连接并启动新线程的代码
        SOCKET TempSock = SOCKET_ERROR;                 // create a socket called Tempsock and assign it the value of SOCKET_ERROR
        while (TempSock == SOCKET_ERROR && numCC !=2)   // Until a client has connected, wait for client connections
        {
            cout << "Waiting for clients to connect...\n\n";
            while ((ClientSocket = accept(Socket, NULL, NULL))) 
            {
            // Create a new thread for the accepted client (also pass the accepted client socket).
            unsigned threadID;
            HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &ClientSession, (void*)ClientSocket, 0, &threadID);
            }
        }
客户端会话()
    unsigned __stdcall ClientSession(void *data)
    {
        SOCKET ClientSocket = (SOCKET)data;
        numCC ++; // increment the number of connected clients
        cout << "Clients Connected: " << numCC << endl << endl; // output number of clients currently connected to the server
        if (numCC <2) 
            {
                cout << "Waiting for additional clients to connect...\n\n";
            }   
        if (numCC ==2)
        {
        SendRender();       // ONLY TO CLIENT 1???????????
            // wait for client render to complete and receive Done message back
            memset(bufferReply, 0, 999);                                // set the memory of the buffer
            int inDataLength = recv(ClientSocket,bufferReply,1000,0);   // receive data from the server and store in the buffer
            response = bufferReply;                                     // assign contents of buffer to string var 'message'
            cout << response << ". " << "Client 1 Render Cycle complete.\n\n";
            SendRender(); // ONLY TO CLIENT 2????????????
        }
        return 0;
    }
Sendrender() 函数(向客户端发送渲染命令)
    int SendRender()
    {
        // Create message to send to client which will initialise rendering
            char *szMessage = "Render";
            // Send the Render message to the first client
            iSendResult = send(ClientSocket, szMessage, strlen(szMessage), 0);      // HOW TO SEND ONLY TO CLIENT 1???
            if (iSendResult == SOCKET_ERROR) 
        {
                // Display error if unable to send message
                cout << "Failed to send message to Client " << numCC << ": ", WSAGetLastError();
                closesocket(Socket);
                WSACleanup();
                return 1;
        }
            // notify user that Render command has been sent
            cout << "Render command sent to Client " << numCC << endl << endl;
            return 0;
    }