socket TCP网络编程问题

tiger波波 2016-07-08 11:27:19
socket通讯中,客户端和服务器采用TCP方式进行通讯,请问:

1)A方向B方发送N包数据,1,2,3,4,5.。。。,B方接收数据包顺序会不会乱?比如说变成了1,2,4,3,5.。。。
2)A方向B方发送一包大数据,TCP/IP协议可能会在传输中拆成小包发送,那么B方接收到的是还原后的数据包还是拆分后的数据包。
3)A方向B方发送数据,B方接收后的数据会不会数据不全,丢数据。比如A发12345678,B接收后变成12367
...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenyi0106 2016-07-08
  • 打赏
  • 举报
回复
1)A方向B方发送N包数据,1,2,3,4,5.。。。,B方接收数据包顺序会不会乱?比如说变成了1,2,4,3,5.。。。 不会,TCP是保证传输的,这个保证包括但不限于保证包顺序和包数据。 而且,如果你了解TCP协议栈原理的话,你会发现,它不会一下发送全部数据,而是只发送滑动窗口内的数据,其他的数据需要由ACK来驱动发送。 2)A方向B方发送一包大数据,TCP/IP协议可能会在传输中拆成小包发送,那么B方接收到的是还原后的数据包还是拆分后的数据包。 原始数据(还原后的数据。但是可能会收不全,受接收缓冲区大小影响,而接收缓冲区又受你应用层读取数据速度影响,需要循环接收)原理同上,这些工作都是协议栈完成的,你应用层无需关心这些细节。 3)A方向B方发送数据,B方接收后的数据会不会数据不全,丢数据。比如A发12345678,B接收后变成12367 不会,原理同上。(极端情况下,如黑客攻击等,是会发生数据被篡改的风险,所以才有了各种加密和认证的东西)
赵4老师 2016-07-08
  • 打赏
  • 举报
回复
引用 4 楼 youyingbo 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
呃。。。这个帖子里越扯越远了,连黑客修改传输数据都出来了。局域网CS结构考虑这些那是吃饱没事干。 [/quote] 今天的局域网CS结构没准明天就变成大网的CS结构了。
Eleven 2016-07-08
  • 打赏
  • 举报
回复
引用 5 楼 youyingbo 的回复:
[quote=引用 3 楼 VisualEleven 的回复:] TCP是流协议,没有消息边界,你需要自己保证一个数据包接收完成。
是的。我想问的是这个流会不会少东西,会不会多东西,会不会乱序[/quote] 你单线程发送,接收端接收的顺序就和你发送的顺序一致。如果你是多线程发,单线程收的话,顺序就要考虑了。
tiger波波 2016-07-08
  • 打赏
  • 举报
回复
引用 3 楼 VisualEleven 的回复:
TCP是流协议,没有消息边界,你需要自己保证一个数据包接收完成。
是的。我想问的是这个流会不会少东西,会不会多东西,会不会乱序
tiger波波 2016-07-08
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
呃。。。这个帖子里越扯越远了,连黑客修改传输数据都出来了。局域网CS结构考虑这些那是吃饱没事干。
Eleven 2016-07-08
  • 打赏
  • 举报
回复
TCP是流协议,没有消息边界,你需要自己保证一个数据包接收完成。
赵4老师 2016-07-08
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧