问个关于socket发送数据的小白问题

colorfulcode 2016-03-01 10:47:42
话说一般通信时都是将数据内容和其他必要的信息打包后send出去,recv时再将其还原。

那么,如果不打包而是一个数据一个数据的依次send,那么对方recv时会不会容易出现错乱的情况?
...全文
417 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨笨仔 2016-03-03
  • 打赏
  • 举报
回复
引用 楼主 ColorfulCode 的回复:
话说一般通信时都是将数据内容和其他必要的信息打包后send出去,recv时再将其还原。 那么,如果不打包而是一个数据一个数据的依次send,那么对方recv时会不会容易出现错乱的情况?
在应用层数据不管你如何发送,它都会被组装到一个TCP包中,再通过发送缓冲区将一个包发出。但是,在硬件的底层数据总是按位串行发送。你所谓“打包”的是你的数据,而使用TCP/IP协议发送时,在协议层还要再为数据加包。你使用的socket又称“套接字”,它本身就一个包的概念,不知你的问题有意义吗?
xian_wwq 2016-03-03
  • 打赏
  • 举报
回复
使用tcp能够保证,先发的数据先到 socket的操作对象本质上是byte[], 业务数据转换及解析都是上层的事情
赵4老师 2016-03-03
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
shenyi0106 2016-03-02
  • 打赏
  • 举报
回复
如果你是多线程send,并且send的是同一块内容的不同部分(比如你要发送一个很大的文件,你把文件分成块,用多线程send不同的块),这时就需要添加必要的信息了,你不能直接发送,因为你无法保证多线程send的先后顺序,也就是说,你无法在recv后,还原这些包的先后顺序,可能会导致文件损坏。
kinkon007 2016-03-02
  • 打赏
  • 举报
回复
tcp有序号不会乱
lx624909677 2016-03-01
  • 打赏
  • 举报
回复
不会乱呀,为什么会乱?加数据包头只是为了接收后解析用的,比如发送一个文件,接收方要知道文件的大小和内容,这个时候就需要用数据包头来区分他们了

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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