关于socket的,发我邮件,即给源代码。
[email protected]

解决方案 »

  1.   

    应该不是什么大不了的问题.仔细检查一下Socket的缓冲接收和发送部分的代码,有没有越界的地方.
      

  2.   

    Socket在Send和Recv的时候都需要传入需要发送和接收的字节数,返回实际发送和接收的字节数,再以这个返回值做为下一次发送或接收的偏移量.
    只要你知道这个原理就不会溢出来.
    还有就是发送和接收都用循环的方式.//Convert the package to send buffer and send the buffer.
    void CSocketClient::SendPackage()
    {
    //Conver to send buffer.
    m_protocol.PackageToSend(m_pkSend,m_bufSend);
    int iSend=0;
    while(m_bConn && m_bufSend.dwLen>0)
    {
    iSend=Send(m_bufSend.puData,m_bufSend.dwLen-iSend);
    m_bufSend.dwLen-=iSend;
    }
    }
      

  3.   

    void CSocketClient::OnReceive(int nErrorCode) 
    {
    // TODO: Add your specialized code here and/or call the base class
    CSocket::OnReceive(nErrorCode);
    //Receive data.
    int iRecv=0;

    UCHAR* pRecv=&m_bufRecv.puData[m_bufRecv.dwLen];
    int iCount=MAX_BUFFER_LEN-m_bufRecv.dwLen;

    iRecv=Receive(pRecv,iCount);
    if (iRecv>0)
    {
    m_bufRecv.dwLen+=iRecv;
    m_bufRecv.puData[m_bufRecv.dwLen]=0X00;

    while(m_protocol.ReceiveToPackage(m_bufRecv,m_pkRecv))
    {
    ProcessRecvPackage();
    }
    }
    }
      

  4.   

    钱的事直接邮给我就行了.
    我的msn [email protected]
      

  5.   

    源代码已经发给lzzqqq,希望多点人帮助。
      

  6.   

    发给我看看 msn&mail:[email protected]
      

  7.   

    To: lzzqqq(Jonersen)
    钱还是先汇到我的帐号上吧,我怕你收不到
      

  8.   

    已经收到,没想到这么一大堆代码....
    我看了一下,你好象是自己封装的Socket类,为什么不直接用MFC的CSocket呢?
    你说的每当客户端连接时,内存就增加一点.客户端断开时,在服务器端的Work Socket的OnClose事件里delete this;就可以,我通常是这么做.
      

  9.   

    客户端连接时,服务端就增加一点内存是正常的.因为你服务端的Socket要Accept到一个新的Work Socket,所以这个新的Work Socket会占一点内存.
    当客户端断开时,你服务端的负责与客户端连接的Work Socket会收到Close事件.在Work Socket的OnClose事件里面 delete this;就可以.