免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10369 | 回复: 17
打印 上一主题 下一主题

[函数] recv 怎么判断什么时候结束? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-31 20:08 |只看该作者 |倒序浏览
socket中接受数据用recv  比如开了个char buf[100]作为缓冲 recv(s,a,100,0)  服务器发送 211 server ready,  recv收到后就会返回。请问recv是怎么判断什么时候该返回的? 我在哪看过tcp是面向流的,不在数据中插入分割符。那recv怎么知道“211 server ready"这个命令已经完了 应该返回?

论坛徽章:
0
2 [报告]
发表于 2008-07-31 21:46 |只看该作者
自己顶下

论坛徽章:
0
3 [报告]
发表于 2008-07-31 21:54 |只看该作者
recv(...) 并不知道你的数据何时是结束的,仅取接收buffer而已.

论坛徽章:
0
4 [报告]
发表于 2008-07-31 21:59 |只看该作者
一般是有信令格式有特殊规定
比如/r/n/r/n标识结束

论坛徽章:
0
5 [报告]
发表于 2008-07-31 22:02 |只看该作者
原帖由 voipexplore 于 2008-7-31 21:59 发表
一般是有信令格式有特殊规定
比如/r/n/r/n标识结束


LZ说的TCP不是属于这种情况.

论坛徽章:
0
6 [报告]
发表于 2008-07-31 22:05 |只看该作者
“211 server ready" 的判断是由应用程序来判断的,不属于recv(...) 判断的范围.

论坛徽章:
0
7 [报告]
发表于 2008-08-01 00:25 |只看该作者
原帖由 system888net 于 2008-7-31 22:05 发表
“211 server ready" 的判断是由应用程序来判断的,不属于recv(...) 判断的范围.

但是比如ftp时,服务端向客户端发送 server ready时,这条指令比我设置的buf小(100b) ,然后等待客户端发送用户名。
客户端在收到server ready后并没有继续等待数据填满100b,而是返回了,告诉应用程序该发送用户名了。 这样看recv知道什么时候返回啊?而不是等缓冲区满。 是不是我理解错了?

论坛徽章:
0
8 [报告]
发表于 2008-08-01 00:29 |只看该作者
原帖由 ifosn 于 2008-8-1 00:25 发表

但是比如ftp时,服务端向客户端发送 server ready时,这条指令比我设置的buf小(100b) ,然后等待客户端发送用户名。
客户端在收到server ready后并没有继续等待数据填满100b,而是返回了,告诉应用程序该发 ...


请看ftp的RFC
lz应该理解一下TCP/IP与应用级协议的联系 区别
网络应用的基本构造方式

50%的rfc的存在原因就是解决你这些问题

传输层不提供的功能 你自己设计 解决

不过回到你的问题
man recv 仔细看

[ 本帖最后由 blizzard213 于 2008-8-1 00:40 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-08-01 01:03 |只看该作者
原帖由 blizzard213 于 2008-8-1 00:29 发表


请看ftp的RFC
lz应该理解一下TCP/IP与应用级协议的联系 区别
网络应用的基本构造方式

50%的rfc的存在原因就是解决你这些问题

传输层不提供的功能 你自己设计 解决

不过回到你的问题
man recv 仔细看

我man recv没有相关资料。
我以前写ftp下载时,发送信息就直接在套接字send 接受就直接recv 好像没涉及到这个问题啊,我只知道recv返回代表对方的一条指令发送过来了。
再比如用原始套接字网络监控的时候,也是直接循环recv,为什么recv返回一次就是一个包,TCp怎么判断出的呢?

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
10 [报告]
发表于 2008-08-01 08:25 |只看该作者
recv是阻塞的吧,循环读取
当读取到的字节数小于事先定义的buff大小则表示读完吧

这是我个人理解的

[ 本帖最后由 cheng_lai_shun 于 2008-8-1 08:27 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP