socket中send出去的数据大小和recv的不一样怎么回事?

linkaihui 2006-02-11 03:31:50
我用TCP进行一个文件的分批传输时,客户端每次send出去的数据大小为1024B,但是服务器方收到的数据大小有时是1024B,有时却没有那么大(比如只有400多B),这样造成我收到的文件大小比原来的要小,请教各位高手,这是怎么回事呢?可能是什么原因造成的呢?
...全文
361 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gujianfei1979 2006-02-13
  • 打赏
  • 举报
回复
循环接受
localman 2006-02-13
  • 打赏
  • 举报
回复
对于tcp发送固定大小的包,发送和接受都尽量用类似send_n,和recv_n的方式,非固定大小加上标记
cnwolf 2006-02-12
  • 打赏
  • 举报
回复
检查recv的返回值,如果小于要接受的数据长度,要继续接收

recv只是获取了当前tcp缓冲中的数据,有可能数据还没有传输完毕
nuaawenlin 2006-02-12
  • 打赏
  • 举报
回复
加上结尾符号

recv到结尾符号再退出
msvcp60 2006-02-12
  • 打赏
  • 举报
回复
尽量用线程循环接收
robin_yao 2006-02-12
  • 打赏
  • 举报
回复
首先同意楼上的观点
你出现这样的情况,我想有没有可能
你有发送和接收两个线程,
但是send线程比recv线程先起来了。所以导致,recv接受的晚了。
我猜想的,你可以先启recv线程试试。Good Luck
msvcp60 2006-02-12
  • 打赏
  • 举报
回复
接收的时候一直Recv到length长度的Buffer为止
lzd 2006-02-11
  • 打赏
  • 举报
回复
自己对消息包定义一下...

stuct msg
{
byte 包头标志
int length;
char* Buffer;
};

接收的时候一直Recv到length长度的Buffer为止

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧