社区
网络编程
帖子详情
socket中send出去的数据大小和recv的不一样怎么回事?
linkaihui
2006-02-11 03:31:50
我用TCP进行一个文件的分批传输时,客户端每次send出去的数据大小为1024B,但是服务器方收到的数据大小有时是1024B,有时却没有那么大(比如只有400多B),这样造成我收到的文件大小比原来的要小,请教各位高手,这是怎么回事呢?可能是什么原因造成的呢?
...全文
361
8
打赏
收藏
socket中send出去的数据大小和recv的不一样怎么回事?
我用TCP进行一个文件的分批传输时,客户端每次send出去的数据大小为1024B,但是服务器方收到的数据大小有时是1024B,有时却没有那么大(比如只有400多B),这样造成我收到的文件大小比原来的要小,请教各位高手,这是怎么回事呢?可能是什么原因造成的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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为止
Socket
中
send
()函数和
recv
()函数详解
目录1、
send
函数2、
recv
函数关于
socket
的
send
和
recv
的超时设置 1、
send
函数 int
send
(
SOCKET
s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用
send
函数来向TCP连接的另一端发送
数据
。 客户程序一般用
send
函数向服务器发送请求,而服务器则通常用
send
函数来向客户程序发送应答。 (1)第一个参数指定发送端套接字描述符; (2)第二个参数指明一个存放应用程序要发送
数据
的缓冲区; (3)第三
windows
socket
编程
中
send
与
recv
函数的收发
数据
不一致问题
这几天在使用windows的
socket
编程去做文件的传输,发现这个windows下的
socket
编程也真和以前接触过的java和C#的有很多的不同,有异步的模型也有同步的模型,为了简单起见我还是使用了同步阻塞模型,没想到这个阻塞也还不是想象
中
的阻塞,以前使用
send
发送完
数据
后,
recv
就会把
数据
都接完,调试了很久,发现
recv
老是接收的
数据
比
send
的要少,上网查了一下,大概明白
recv
就是只
Socket
的
Send
和
Recv
接收速率慢说明
1. 背景 在不同电脑的Windows系统
中
,使用同一个服务程序和客户端程序(TCP协议)进行测试,在部分电脑(win7)出现
Send
和
Recv
大量
数据
,有时会出现
Send
和
Recv
一个
数据
包耗时1~2s的情况。 2. 原因 最终发现是不同的电脑带宽不一样,导致
Recv
的速率不一样,而对于TCP协议,若内核
中
的
Socket
Recv
缓冲区满,而
数据
没有及时被应用读取走,此时服务程序
Send
一个
数据
包的耗时就会加长(因为一直在重发
数据
包)。这种问题可以通过尝试修改内核
中
的
Socket
Recv
缓冲区大
socket
send
recv
使用心得(Python windows)
最近使用python
socket
做了一些程序,遇到了一些问题,后来逐一解决了。这里结合之前的认知,总结以下心得,避免后来人踩坑。 1、
send
和
send
all的区别 发送方使用
send
all,不要使用
send
。
send
all在返回的时候,会确保
数据
已传给tcpip;
send
并不一定会把
数据
全部发完,而是发一次,就返回发送的
数据
长度。在一般的程序设计
中
,我们更多场景是使用
send
all,使用
send
就需要自己处理未发送的
数据
。 2、
recv
是拷贝
数据
,不是接收
数据
,每次拷贝多少?
recv
并不是取完对方发送
C++
Socket
编程(二)
send
与
recv
缓冲区与阻塞
socket
缓冲区每一个
socket
在被创建之后,系统都会给它分配两个缓冲区,即输入缓冲区和输出缓冲区。
send
函数并不是直接将
数据
传输到网络
中
,而是负责将
数据
写入输出缓冲区,
数据
从输出缓冲区发送到目标主机是由TCP协议完成的。
数据
写入到输出缓冲区之后,
send
函数就可以返回了,
数据
是否发送
出去
,是否发送成功,何时到达目标主机,都不由它负责了,而是由协议负责。
recv
函数也是一样的,它并不是直
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章