用VC++ 6.0编的程序,只接收文本数据,然后处理数据。(具体是带\r\n的ASCII字符,数据量不大每秒最多200字节)。
程序运行数小时之后,就停止收包了。如果退出此程序然,后重新运行此程序的话程序又能够收包,
当然还会出现上面的问题。网络方面,偶很菜,是不是网络缓冲区出了问题,该如何解决呢?
请高手赐教,能有源程序最好,在线等...

解决方案 »

  1.   

    程序是不是有内存泄露。
    可以在收包,处理包等关键的地方,TRACE一些调试信息,现在关键是确定问题出在哪个环节,找到了再想办法解决。
      

  2.   

    这个具体要看你的程序才能知晓。有可能socket阻塞了。
    你要对socket通讯的各个步骤增加出错处理和日志管理。否则以后有错误你无法定位。
      

  3.   

    内存泄漏可以排除,可能是socket阻塞了,如果是阻塞了,我该如何解决呢?
      

  4.   

    查代码吧。哪些地方调用了socket的阻塞方式的函数。比如send,receive等,都可能造成阻塞。在这些地方增加判断吧。
      

  5.   

    用的是异步socket
    void CClientSocket::OnReceive(int nErrorCode) 
    {
    // TODO: Add your specialized code here and/or call the base class
    char buffer[4096];
    int nRead = 0; nRead = Receive(buffer, sizeof(buffer) - 1, 0); switch (nRead)
    {
    case 0:
    AfxMessageBox ("Error occurred 0");
    Close();
    break; case SOCKET_ERROR:
    if (GetLastError() != WSAEWOULDBLOCK) 
    {
    AfxMessageBox ("Error occurred 'WSAEWOULDBLOCK'");
    Close();
    }
    break; default:
    if(nRead > 0 && nRead < sizeof(buffer))
    {
    buffer[nRead] = '\0';//terminate the string
    OnAisMsgExtrat(buffer, nRead);
    }
    break;
    } CAsyncSocket::OnReceive(nErrorCode);
    }