TCP 接收数据出了点小问题 请大家帮忙 本帖最后由 heihengheng 于 2010-05-13 11:36:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你应该跟你recv最后一个参数写的有问题。1024*10 - sum,如果sum的值超过了1024*10呢? 除了ls说的情况图片数据是2进制的,中间有/0等,你的recvbuf的长度是怎么求的?不能用字符串的办法求了 服务器图片大小全部是为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 了? 二进制数组里面本来就有\0,你是怎么知道recvbuf里面内容不够的? recv函数是有数据立马返回的,自己写个MyRecv函数,等待接收完指定字节数后才返回 发送 POST /new_ems/2.jpg HTTP/1.0User-Agent:Mozilla/4.0(compatible; MSIE 7.0; Windows NT 5.1)Content-Type:image/jpegCache-Control: no-cacheContent-Length:10接收 HTTP/1.1 200 OKServer: Apache-Coyote/1.1ETag: W/"2443-1272161440000"Last-Modified: Sun, 25 Apr 2010 02:10:40 GMTContent-Type: image/jpegContent-Length: 2443Date: Thu, 13 May 2010 09:48:30 GMTConnection: close?明明是有图片的。也可以接收到数据。就是返回? 这个东西。我汗了。。根据观察,好像碰到 空字符 16进制 00 后面的数据就丢失。 关于服务器的问题。 CFileFind类的一个很奇怪的问题! ultraedit 查看doc时是看的doc中的明文吗?谢谢! 遇到麻烦的问题,关于defwindowproc的报错 新手:如何用MFCS设计一个对话框,编辑区内的记录可以修改 messagebox的确定安钮怎么老是中文,如何显示英文 如何获得控件的Activate事件 怎样得到当前文件的路径? 我两个小问题,请各位帮助 如何将一个布尔变量的值赋给另一个布尔变量? zip解压 如何获取当前的网络带宽
1024*10 - sum,如果sum的值超过了1024*10呢?
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 了?
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 后面的数据就丢失。