社区
通信技术
帖子详情
会不会出现这种情况?
colorrain
2002-12-17 04:33:00
服务器程序调用一次send,而客户端程序却要调用多次recv?
...全文
23
12
打赏
收藏
会不会出现这种情况?
服务器程序调用一次send,而客户端程序却要调用多次recv?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
colorrain
2002-12-18
打赏
举报
回复
怎么没法给分?
colorrain
2002-12-18
打赏
举报
回复
多谢imquestion和木易指点,结贴
imquestion
2002-12-18
打赏
举报
回复
另一条了解这个问题的路是读tcp/ip的源码。
最好做一下这个试验:
客户端发8000数据,
服务器端照wwwunix(木易) 说的收,
int n,x;
n=8000;
while (n>0) {
x=recv(s,buf,8000,0);
if(x<8000)printf("唉唉唉\n");
n=n-x;
}
看是否能总能一次收完。
这不能在一台机子上试。
多试几次,如果有一次出现了收多次才收完,
我们想知道的问题就有答案了。
imquestion
2002-12-18
打赏
举报
回复
单说send(s,"hello word",11,0);的话,是不会出现两次才读完的情况。
因为很小,只有11个字节。肯定是在同一个ip包中传输。要收到就都收到,要收不到就都收不到。
但是我想你想要了解的是大量数据的话,能否出现那种情况。
上面举得那个例子,应该可以比较好的说明,我没自己试,
可以调整Sleep的时间看看会有什么不同。
一个send中间,如果传输大量数据,这些数据中间是有可能有间断吧,
ip数据是有可能丢失的,然后重传,可能是会花些时间。
imquestion
2002-12-18
打赏
举报
回复
是有可能的,前面其实已经很明显了。
看这个例子,
send(s,"hello",5,0);
Sleep(100);
send(s," world",6,0);
你试试看,recv是怎么收的。
这个实际上是在模拟send(s,"hello world",11,0)过程中由于一些情况出现的短暂的数据没传到的情况。下面另说。
colorrain
2002-12-18
打赏
举报
回复
继续讨论:
服务器:send(s,"hello word",11,0);
客户端:
char buf[11];
recv(s,buf,11,0);
tcp 阻塞模式.这种情况下recv会不会先读到部分数据比如"hello",然后再次调用recv(s,buf,11,0)时他又读到" word"?
欢迎讨论..
imquestion
2002-12-17
打赏
举报
回复
有其他疑问就也提出来大家讨论,大家一起试,
最后大家都明白了,就好了。
imquestion
2002-12-17
打赏
举报
回复
好吧,还是作试验吧。
tcp程序两个server,client。
server在一个端口上的recv阻塞,recv中的len填256个字节,
recv操作之后,会有个printf("recv %s",...)。
client向这个server发数据"hello",明显不到256个字节。
如果recv收不到256个字节就不出来的话,我们就不会看到printf的内容,
因为客户端只发了"hello"不足256个字节。
试验结果:
server端打印了收到的内容,说明了在阻塞模式下recv收到内容不足参数
中给出的,也是会返回的。
如果要找一下具体过程的话,看源码,看系统是如何具体实现的。
wwwunix
2002-12-17
打赏
举报
回复
int n,x;
n=1000;
while (n>0) {
x=recv(s,buf,1000,0);
n=n-x;
}
wwwunix
2002-12-17
打赏
举报
回复
recv将返回接收到的字节数,它不一定等于1000
colorrain
2002-12-17
打赏
举报
回复
谢谢楼上!
tcp 协议 如果是阻塞模式下,send(s,buf,1000,0);recv(s,buf,1000,0)
会不会出现这种情况?
recv没有收到指定字节数据他会不会返回,不出现系统异常信号打断阻塞的情况,请指点.
imquestion
2002-12-17
打赏
举报
回复
当然有可能了。
如果是udp,发送一个消息,收到也是一个消息,即使缓冲区中已经有了好几个消息。
如果是tcp,发送的是字节流,收到的是字节流,
比如你发100字节,接收端先收20字节,再收10字节,再..
就是这样,字节流。
台式计算机的硬件故障,电脑主板坏了
会
出现
什么
情况
?台式机电脑主板常见故障解决方法...
电脑主板坏了
会
出现
什么
情况
?台式机电脑主板常见故障解决方法:一、开机无显示1、电脑开机无显现,首要咱们要检查的就是是BIOS。主板的BIOS中储存着重要的硬件数据,同时BIOS也是主板中比较软弱的部分,极易...
●请你解释为什么
会
出现
4.0-3.6=0.40000001
这种
现象?
原因简单来说是这样:2进制的小数无法精确的表达10进制小数,计算机在计算10进制小数的过程中要先转换为2进制进行计算,这个过程中
出现
了误差。 浮点数值采用二进制系统表示,在二进制中无法精准的表示分数1/10 这...
Linux中
出现
-bash-4.2$
这种
情况
怎么办?
一、首先为什么
会
出现
这种
问题? 1.1创建一个用户 1.2切换到用户目录下删除文件 1.3 切换到用户环境 二、解决问题 2.1切换倒/etc目录下并查看 2.2 切换到/skel目录 2.3 复制相关文件 2.4 问题修复 一、...
#NAME?_EXCEL中
出现
#NAME?原因及解决方法
”错误值,#NAME
出现
是因为输入公式时输入的函数名称不正确,那么我们该如何解决
出现
的
这种
问题呢?这里,小编为大家整理了一份EXCEL中
出现
#NAME?原因及解决方法,希望能帮助到大家。第一种
情况
:如果公式返回的错误...
“不能在此路径中使用此配置节。如果在父级别上锁定了该节,便
会
出现
这种
情况
“的解决方案(亲测)
如果在父级别上锁定了该节,便
会
出现
这种
情况
。锁定是默认设置的(overrideModeDefault=“Deny”),或者是通过包含 overrideMode=“Deny” 或旧有的 allowOverride=“false” 的位置标记明确设置的。 配置文件 \?\X...
通信技术
4,356
社区成员
28,926
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章