吾写的这个基于Socket的聊天程序还是有一点问题如下,望赐教:
就是服务器端开始侦听之后,客户端本来通过IP连接应该没问题的,
为什么有时候老是会出现连接失败,而且这种情况出现的几率还比较大
这是为什么呢,是网络问题还是别的什么??

解决方案 »

  1.   

    你连接的时候是不是没有新开一个Socket用来接受连接,而是直接用侦听的那个Socket连接了。那样你在重复连接的时候会因为已经没有侦听的Socket而出现连接错误。
      

  2.   

    不是啊服务端有一个Socket用于侦听,然后用另一个Socket用于连接
    是不是没有做链表会出现这样的情况?
    比如说客户端和服务端同时开程序,服务端侦听,如果此时客户端连接的话可能成功的机率较大
    但是如果客户端关掉程序重新开启再连接就很可能不行了.
    还有就是客户端和服务端本来已经连接好的,但放那一段时间不动它的话就连不上了,断了!
    连接为什么这么不稳定??
      

  3.   

    以下是两个函数:侦听和连接处理函数:
    我觉得应该是侦听函数在简单了,但不知道本质问题出在什么地方,望指教!
    void CSockDlg::OnListen() 
    {
    // TODO: Add your control notification handler code here
    m_server.Create(1000);
    m_server.Listen();
    }
    void CSockDlg::ShowAccept()
    {
    m_server.Accept(m_recv);
    m_serfile.open("Server.txt",ios::out|ios::ate);
    m_listen.EnableWindow(FALSE);
    m_connect.EnableWindow(FALSE);
    m_ipctrl.EnableWindow(FALSE);
    m_send.EnableWindow(TRUE);
    AfxMessageBox("server端连接成功!");
    m_serflag=TRUE;
    }
      

  4.   

    另一个用于连接Socket应该new一个新的Socket进行接受连接.
      

  5.   

    CTcpSocket* pSocket=new CTcpSocket(this);
    if(m_pListen->Accept(*pSocket))
    {
    m_lstConnectionList.AddTail(pSocket);
    CString strWork="有连接进来!";
    mstr.AddTail(strWork);
    Invalidate();
    }
    else
    {
    delete pSocket;
    pSocket=NULL;
    }
      

  6.   

    m_recv这也是与侦听连接相异的socket啊
    这与上面有什么区别吗??