本帖最后由 heihengheng 于 2010-05-13 11:36:15 编辑

解决方案 »

  1.   

    你应该跟你recv最后一个参数写的有问题。
    1024*10 - sum,如果sum的值超过了1024*10呢?
      

  2.   

    除了ls说的情况图片数据是2进制的,中间有/0等,你的recvbuf的长度是怎么求的?不能用字符串的办法求了
      

  3.   

    服务器图片大小全部是为3K的bmp图片,很小 , 绝对没有超过我设置的接收数组大小。但是就是有的图片接收不完全,但是  我怀疑是图片的二进制有特殊的字符让TCP停止接收了。。 大家觉得呢。
    rtn = 0;
    sum = 0;
    char recvbuf[1024*10];
    while(1)
    {
       rtn = recv(recvbuf + sum, 1024*10 - sum);  //接收缓冲,接收缓冲大小
    if(rtn <= 0) break;
       sum += rtn; //已经接受到的数据大小
    }这个sum就是接收数据的大小,我的图片都是3K,这个数值我每次观察也都是1024*3 这么大,但是有的时候recvbuf只有图片的部分内容。   是不是遇到什么特殊字符 TCP就把后面数据自动变为 \0 了?
      

  4.   

    二进制数组里面本来就有\0,你是怎么知道recvbuf里面内容不够的?
      

  5.   

    recv函数是有数据立马返回的,自己写个MyRecv函数,等待接收完指定字节数后才返回
      

  6.   

    发送  
    POST /new_ems/2.jpg HTTP/1.0
    User-Agent:Mozilla/4.0(compatible; MSIE 7.0; Windows NT 5.1)
    Content-Type:image/jpeg
    Cache-Control:   no-cache
    Content-Length:10
    接收   HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    ETag: W/"2443-1272161440000"
    Last-Modified: Sun, 25 Apr 2010 02:10:40 GMT
    Content-Type: image/jpeg
    Content-Length: 2443
    Date: Thu, 13 May 2010 09:48:30 GMT
    Connection: close?
    明明是有图片的。也可以接收到数据。就是返回?  这个东西。我汗了。。
    根据观察,好像碰到 空字符 16进制 00 后面的数据就丢失。