我刚才试了,我有两个socket,一个接受协议,一个接受图片,我把图片的线程挂起,单跑协议socket,一直没有问题,应该就是接收图片有问题,在接收图片中我用下面的代码跑,一会就挂了
 if(0 < buflen)
{
recvBuf[buflen] = 0;
// 处理消息
/**********测试用例************/
CString strRcv = _T("");
strRcv.Format("%s",recvBuf);
/****************************/
// 处理数据
}

解决方案 »

  1.   

    recvBuf定义小了吧 越界有可能
      

  2.   

    recvBuf定义的是socket一次性接收的最大字节数MAX_PATH,循环接收一个图片数据(肯定大于MAX_PATH)
    char recvBuf[MAX_PATH] = {0};
    while(TRUE)
    {
    memset(recvBuf, 0, MAX_PATH*sizeof(char));
    int buflen = recv(m_ImageClient, recvBuf, MAX_PATH, 0);
                    if(0 < buflen)
                    {
                    }
    }
    就这么简单的代码还是引起异常啊
      

  3.   

    为什么要自己写socket而不是使用第三方库curl?while死循环了???  出现异常时点“重试”,看看断点在哪句函数,然后分析原因
      

  4.   

    strRcv.Format("%s",recvBuf);
    这句话干嘛用的
    不是图片数据么
    怎么当成字符串处理了
      

  5.   

    因为涉及到一些自定义的操作,所以不用第三方。它就是弹出一个对话框,并没有"中断" "重试",只有确认,等点击确认vs就自动退出了。就算while循环,也不会引起异常,又没有操作数据
      

  6.   

    这句话是用来写log日志的,把这些注掉还是会崩溃
      

  7.   

    MAX_PATH是260的大小,能放下你图片?
      

  8.   

    客户端不发数据,服务器一直在while recv非祖塞,这种情况,还是过段时间会挂,会是代码问题嘛?