我现在连接了几个客户端,OnReceive()触发后,怎样知道是哪个客户端发来的数据呢?void CSockDlg::OnReceive()
{
char *pbuf = new char[1025];
int iBufSize = 1024;
int iRcvd; //接受数据
iRcvd = m_sConnectSocket[ClientNum].Receive(pbuf,iBufSize);//服务器
}

解决方案 »

  1.   

    你可以在消息包加个标识 或者用原始套接字比较灵活...一个socket对应一个管道.
      

  2.   

    accept的时候把socket保存起来..类似于你的m_sConnectSocket[ClientNum]..每一个下标代表一个socket
      

  3.   

    谢谢!
    包加标识到是能解决我的问题。另外,一楼能不能具体点啊,我新手,完全没看明白.
    3楼老大,我就是保存起来的,但accept保存起来的socket跟新收到的客户端怎么对应?我这里的应用是每个客户端随时都有可能发数据到服务器.
    m_sListenSocket.Accept(m_sConnectSocket_R[clientNum]);//有新连接
             i = sizeof(sockaddr_in);         
    m_sConnectSocket_R[clientNum].GetPeerName((SOCKADDR*)&ClientAddr,&i);//得到IP,PORT
    clientNum++;//连接上的客户端计数另外追回个问题:我这样的做法来连接多个客户端,应该没有什么问题吧?多开几个线程是不是更好些?有实例吗,正如大家看到的那颗绿三角,我新手。
    谢谢!问题解决了,我重新多加点分给大家。
      

  4.   


    typedef struct tagCLIENT_DATA
    {
    SOCKET socket ;
    char UserName[14];
    char PassWord[14];
    }CLIENT_DATA;连接成功后,client 给 server发个包,告诉server自己的名字和密码
    然后server填充好这个结构体,以后接收的时候不就知道了吗实现3楼的想法