用CAsyncSocket做了客户端与服务器端,仅为一个客户端,可以互发信息,但是不知道多个客户端给服务器发信息是怎么实现的?

解决方案 »

  1.   

    用CObArray存储联到服务器的各个客户端信息,然后一个个发就行了
      

  2.   


    小弟用CPtrList尝试  一直,没有成功.
    能不能给段代码 看看啊  不胜感激!!!!
      

  3.   

    对于TCP,每个客户端都需要与服务器建立连接,在服务器端每个连接各用一个socket。
    对于UDP,接收数据的同时会得到对方的地址。
      

  4.   

    void CNewSocket::OnAccept(int nErrorCode)
    {
       CFormView2* pView = (CFormView2*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveView();
       if(nErrorCode==0)
       pView->OnAccept(); }
    void CFormView2::OnAccept()
    {
     CNewSocket *svclieSocket=new CNewSocket();
     svclieSocket->Accept(m_sConnectSocket);
    }
    void CFormView2::OnReceive()
    {
    iRcvd=m_sConnectSocket.Receive(pBuf,iBufSize);
    }
    怎样修改啊?????????
      

  5.   

    你可以下载下面类库试试:
    类库KYLib 2.0 for VC6:    http://download.csdn.net/source/1031569 
    类库KYLib 2.0 for VS2005: http://download.csdn.net/source/1032667 针对 socket 有完善的类,可以方便接收和发送,如:TKYTCPClient, TKYTCPServer, TKYSockRecvThread等等。
      

  6.   

    用CAsyncSocket处理多连接总感觉不稳当啊,建议LZ用winsock吧,一劳永逸~
    没直接用过,LZ看看吧,自己调试一下
    struct SOCKINFO {
    CNewSocket *pSocket;
            char* pBuf;
            int iBufSize;
    }CPtrList m_socketList;//重写OnAccept
    void CNewSocket::OnAccept(int nErrorCode) 

      CNewSocket* pSocket = new CNewSocket;
     Accept(*pSocket); 
      SOCKINFO *pSockInfo = new SOCKINFO;
      pSockInfo->pSocket = pSocket;   
      pSockInfo->iBufSize = 1024;
      pSockInfo->pBuf = new char[1024];
      m_socketList.AddTail(pSockInfo);
    } //重写OnReceive
    void CNewSocket::OnReceive( int nErrorCode )
    {
    SOCKINFO *pSockInfo;
    POSITION pos;
    for (int i = 0; i < m_socketList.GetCount(); i++)
    {
    pos = m_socketList.FindIndex(i);
    pSockInfo = (SOCKINFO*)m_socketList.GetAt(pos);
    if (m_hSocket == pSockInfo->pSocket->m_hSocket)
                    //你要是这句吗?m_hSocket是CAsyncSocket的1个静态变量,其实就是socket
    {
                      iRcvd = Receive(pSockInfo->pBuf,pSockInfo->iBufSize);  
                      if (iRcvd == SOCKET_ERROR)
                         OnClose(...); 
    }
    }
    }//重写OnClose
    void CNewSocket::OnClose( int nErrorCode )
    {
    SOCKINFO *pSockInfo;
    POSITION pos;
    for (int i = 0; i < m_socketList.GetCount(); i++)
    {
    pos = m_socketList.FindIndex(i);
    pSockInfo = (SOCKINFO*)m_socketList.GetAt(pos);
    if (m_hSocket == pSockInfo->pSocket->m_hSocket)
                    //你要是这句吗?m_hSocket是CAsyncSocket的1个静态变量,其实就是socket
    {
    delete pSockInfo;
    m_socketList.RemoveAt(pos);
    break;
    }
    }
    }
      

  7.   

    void CNewSocket::OnReceive()
    {
    iRcvd=Receive(pBuf,iBufSize);
      

  8.   

    从 CAsyncSocket 派生类,然后 accept的是 new 出来
      

  9.   

    CNewSocket::OnAccept中,构造一个CAsyncSocket派生类对象,然后调用this->Accept,将新构造的对象作为函数参数,把你现有的代码都删掉。
      

  10.   

    六楼仁兄说的好像CAsyncSocket不是winsock?
    别吧楼主忽悠了呀,多个客户端就accept后new多个对象,不同连接互不干扰啊