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

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

那么,如果不打包而是一个数据一个数据的依次send,那么对方recv时会不会容易出现错乱的情况?
...全文
399 6 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
不会乱呀,为什么会乱?加数据包头只是为了接收后解析用的,比如发送一个文件,接收方要知道文件的大小和内容,这个时候就需要用数据包头来区分他们了
# 基于Netty的socket server ------ ## 介绍 使用Netty分别实现了三个Socket server和一个socket client: > * server1:9099 主要用来跟硬件传感器通信 > * server2:8888/websocket 作为websocket服务端跟网页通信 > * server2:8889/websocket 跟storm服务做数据通信,同时也作为websocket服务端跟网页通信 > * client 作为模拟客户端,跟server1建立连接后,不断给服务端发送假数据 整个项目启动后,主要做了下面几件事: - [ ] 创建socket server和socket client,并建立连接 - [ ] 执行定时任务,每5秒socket server往所有连接的socket client发送请求数据命令 - [ ] socket client接受到请求数据的命令后,从mysql中读取假数据,伪造成真实设备传输的数据格式,并发送给socket server - [ ] socket server接收到返回的数据后,分别写入到hbase数据库和kafka队列中 - [ ] 最后调用websocket server,往所有跟它建立的客户端发送接收到的数据 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

18,356

社区成员

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

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