TCP socket通信问题
看到TCP通信物理帧的长度是46---1500.
那么如果用户数据比较大(比如50K),那么用TCP通信的时候系统会怎么处理呢?
如果我用socket函数,如send,recv,write,read等进行数据的发送和读取,它能一次读完么?还是说一次性可能会读不完,需要你主动的去编写读完的条件?
应用层以下数据会进行拆分和重组么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
Thank you:)
对用户来说,使用socket的相关函数,就跟操作一般的文件一样,用户把要发送或接受的数据看作数据流。至于数据包的创建,重组,拆分等操作操作系统已经帮我们完成了,用户唯一要做的只是判断相关的函数执行是否成功。
tcp协议栈为你完成了数据包重组.
send,recv,write,read完全有可能接收或发送不完整, 需要判断返回值, 继续发送或接收.
ok:)
看来我有点理解不透彻。我觉得tcp提供了阻塞方式就是这个概念吧?非阻塞方式的话,得操心发送了多少字节,但是阻塞方式的话,没都发送出去就是等同于失败吧?
tcp把通信看作完整的流而不是一个一个的数据包,所以没有帧长的概念,这是初学者常犯的错误