class CNewSocket : public CAsyncSocketvoid CNewSocket::OnReceive(int nErrorCode) 
{
         m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
m_ListBox.InsertString(0,m_szBuffer); // 将收到的消息再发回
         AsyncSelect(FD_WRITE);
}void CNewSocket::OnSend(int nErrorCode) 
{
Send(m_szBuffer,m_nLength,0);
}
------------------------------------------------
class CMyServerSocket : public CAsyncSocketvoid CMyServerSocket::OnAccept(int nErrorCode) 
{
//侦听到连接请求,调用Accept函数
CNewSocket* pSocket = new CNewSocket();
if (Accept(*pSocket))
             pSocket->AsyncSelect(FD_READ);
else
             delete pSocket;
}
---------------------------------------------------
CMyServerSocket  m_srvrSocket;void CRunDlg::OnButton1() 
{
    if (m_srvrSocket.m_hSocket==INVALID_SOCKET)
    {
    BOOL bFlag=m_srvrSocket.Create(1088,SOCK_STREAM,FD_ACCEPT);
    if (!bFlag)
    {
     AfxMessageBox("Socket Error!");
     m_srvrSocket.Close();
     PostQuitMessage(0);
     return;
    }
}
//“侦听”成功,等待连接请求
if (!m_srvrSocket.Listen(1))
{
    int nErrorCode = m_srvrSocket.GetLastError();
    if (nErrorCode!=WSAEWOULDBLOCK)
    {
     AfxMessageBox("Socket Error!");
     m_srvrSocket.Close();
     PostQuitMessage(0);
     return;
    }
}

}-------------------------------------
上边的这段代码,是我写的一个简单的VC的Socket通讯的服务器部分.
我现在遇到的问题是,当客户端发送数据过来的时候,第一次发送,Server端收到,客户端也收到回应.但是第二次之后再发送数据,Server端就收不到了.
这是怎以回事呢?

解决方案 »

  1.   

    看不出有什么问题。
    但告诉你个检查方法,那就是用netstat -a 看看“第二次”通讯时这两个程序的网络状态。
    我估计你的客户端里出了问题。
      

  2.   

    if (!m_srvrSocket.Listen(1))这个函数只执行一次,所以只能收到一次信息,可以写成循环(一般是无限循环):while (!m_srvrSocket.Listen(1))
    {
        ................
    }存在死循环问题,解决方法可以使用多线程,已经离题故在此不详细介绍。
      

  3.   

    没有多次调用listen造成的listen
    te
      

  4.   

    不用m_srvrSocket.Close();这句试试