小弟初学mfc,想把一个聊天程序加上多线程以响应多个客户端同时访问,我写了一个线程函数RcvThread,其中recvsocket=temp->m_sConnectSocket;一句报错:CMySocket:operator=function is unavaliable,不太明白为什么,同时请问这个线程函数是否可行呢,请大家帮忙,谢谢
class CSockDlg : public CDialog
{
.........................
public:
CMySocket m_sConnectSocket;
CMySocket m_sListenSocket;
}void CSockDlg::OnAccept()
{
//Accept the connection request
m_sListenSocket.Accept(m_sConnectSocket);
//Enable the text and message controls 
GetDlgItem(IDC_EMSG)->EnableWindow( TRUE);
GetDlgItem(IDC_BSEND)->EnableWindow(TRUE);
GetDlgItem(IDC_STATICMSG)->EnableWindow(TRUE);

    HANDLE  hThread;                 
    hThread=AfxBeginThread(RcvThread, this);
}UINT RcvThread(LPVOID lparam)
{
char *pBuf = new char[1025];
int   iBufSize = 1024;
int   iRcvd;
CString strRecvd;
//SOCKET  ClientSocket=(UINT)(LPVOID)lparam;
CMySocket recvsocket;//CMySocket由CSocket派生
CSockDlg *temp=(CSockDlg*)lparam;
recvsocket=temp->m_sConnectSocket;
//Receive  the message
iRcvd = recvsocket.Receive(pBuf,iBufSize);
//Did we receive anything?
if(iRcvd == SOCKET_ERROR)
{
}
else
{
//Truncate the end of the message
pBuf[iRcvd] = NULL;
//Copy the message to a CString
strRecvd = pBuf;
//Add the message to the received list box
temp->M_ctlRecvd.AddString(strRecvd);
//Sync the variable with controls
temp->UpdateData(FALSE);
}
}

解决方案 »

  1.   

    CScoket没有重载"="操作
    可以使用指针将m_sConnectSocket定义为指针然后recvsocket指针指向m_sConnectSocket指针
      

  2.   

    聊天程序响应多个客户端同时访问没必要多线程,在CSocket的OnReceive事件里就可处理各个客户端发来的消息。
      

  3.   

    服务器方面,重载两个CSocket分别为CListenSocket,CReceiveSocke。CListenSocket用来在某个端口监听,在OnAccept里面把一个一个客户端socket存到列表里去。
    CReceiveSocke用来接发消息,OnReceive里面可收到任何客户端发送的消息,由当前socket辩识
    哪个客户端,遍历一便socket列表亦可向其他客户端发送刚收到的消息。
      

  4.   

    seu07201213(汪洋中的一片叶子)能否给出代码片断,我刚开始学还不太上手,谢谢了,或者你有类似的程序可否发给我[email protected],无以为报,以分相送
      

  5.   

    我写的赋值运算符重载:
    CMySokcet& operator=(CMySocket &temp)
    {
      this->m_hSocket=temp.m_hSocket;
      return *this;
    }
    不知这样是否对,可以编译执行,但是recvsocket.Receive返回值是SOCKET_ERROR