免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: stiandao
打印 上一主题 下一主题

TCP怎么判断是一个连接发过来的数据包 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-06-20 11:02 |只看该作者
write只能保证你成功的交给kernel 的protocol 模块去处理,当然你可以通过设定来强制write在收到确认后才返回,不过一般没有拿必要。

论坛徽章:
0
12 [报告]
发表于 2006-06-20 12:43 |只看该作者
一个包的大小的是由网络路由决定的, 你只管write就行了. 如你发送一个大包,实际上可能被路由分成许多小包来发送.

如果对于一个长连接, 那么你需在报文头指定你一次write的最大长度, server就根据这个最大长度来决定读多少数据.

论坛徽章:
0
13 [报告]
发表于 2006-06-20 14:45 |只看该作者
如果包确实比较大, 被路由分成了许多小包,你就必须在server做循环读(一般情况下都需要做循环). 对于短连接,读到结束符, 对于长连接,按包文头传送过来的长度读取字节数.

论坛徽章:
0
14 [报告]
发表于 2006-06-20 16:19 |只看该作者
write其实是将数据写到buffer中,你写入的数据长度和buffer的空闲长度有关。最终这些数据由下一层的协议负责
拆分打包发送出去。
read也是一样。
所以,不管是大包还是小包,最安全的做法就是循环读写,直到读到或者写到预期的长度为止

论坛徽章:
0
15 [报告]
发表于 2006-06-20 22:32 |只看该作者
man writev

会对你有帮助

论坛徽章:
0
16 [报告]
发表于 2006-06-21 19:39 |只看该作者
原帖由 stiandao 于 2006-6-20 09:19 发表
那我多次write或一次write,接收方都是一次接收到的,
那在我在多次write时,前几次wriet时数据就到接收方了,还是多次后一起发过去??????

建议搞清楚tcp包和udp包的发送的方式/

论坛徽章:
0
17 [报告]
发表于 2006-06-21 21:18 |只看该作者
偶的理解就是把socket当成一种特殊的文件 server和client端只做一对一的read/write
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP