Socket服务器端需要分别处理多个用户的消息收发
问Server端用Receive收到的消息怎样知道是哪个Client端发来的消息或有没有其它的方法,请赐教!

解决方案 »

  1.   

    CLIENT发来的包另加包头, 标明身份。
      

  2.   

    在消息里标识该Client不就可以了? 机器名,IP地址,或者你自编的标识:1,2,3……
      

  3.   

    不是有句柄吗?
    SOCKET CAsyncSocket::m_hSocket;
      

  4.   

    就用CAsyncSocket或者CSocket对象的地址好了。同一时刻不可能有两个连接使用相同的CSocket对象的
      

  5.   

    可以用getpeername得到对方的ip地址
      

  6.   

    楼主概念有错误,一个socket只能与另一个socket连接的
    一对多的方式在accept之后服务器端生成了一个新的socket与客户端通讯的
    用getpeername() 可以得到对方的地址
      

  7.   

    监听Socket,服务端数据收发socket 是两个不同的概念,监听socket在Accept();
    之后产生了一个服务短数据收发socket,并产生一个新的线程和客户端通信.
      

  8.   

    SOCKADDR_IN addr;
    SOCKET s = accept(m_hSocket,(sockaddr *)&addr, &namelen);  
      //m_hSocket为用于监听的socket  s 为新的用于通信的socket
    if(s == SOCKET_ERROR){
    TRACE("Accept Error: %d \n", (error = WSAGetLastError()));
    return ;
    }        sockaddr_in testaddr;
    int namelen=sizeof(testaddr);
            getpeername(s,(LPSOCKADDR)&testaddr,&namelen);
            CString str=_ntoa((struct in_addr)testaddr.sin_addr);
      

  9.   

    socket 本身就是表示符阿,何苦自己再去添加阿,
    你自己定一个SOCKET socket[] 数组就可以了