http://www.cnblogs.com/eping/archive/2009/12/12/1622579.html

使用TCP协议编写应用程序时,需要考虑一个问题:TCP协议是无消息边界的,即不能保证来自单个Send方法的数据能被单个Receive方法读取。

eg:

第一次发送:abcdefg   第二次发送:123456         接收方接收数据时,可能会出现以下情况:

第一次接收:abcdefg123456   也可能出现:第一次接收:abc 第二次接收:efg12 第三次接收:3456

因此要解决TCP发送消息与接收消息一致性,编程时必须要解决消息边界问题。

解决办法:1、发送固定长度的消息。这种方适用于信息长度固定的场合。

2、将消息长度与消息一起发送。这种方法增加了数据传送信息量,也增加了编程工作量。

eg:每次发送的字符串信息前面用2个字节表明本次信息的长度,接收方先从这两个字节得到信息长度。然后根据长度值循环接收发送方发送的字符串

3、使用特殊标记分隔消息。这种方法适合信息本身不包含特殊标记的场合。如每发送一行信息,就可以用回车换行作为分隔符。

【转】TCP协议的无消息边界问题相关推荐

  1. TCP协议无边界的问题

    使用TCP协议编写应用程序时,需要考虑一个问题:TCP协议是无消息边界的,即不能保证来自单个Send方法的数据能被单个Receive方法读取. eg: 第一次发送:abcdefg   第二次发送:12 ...

  2. C语言实现网络聊天程序的设计与实现(基于TCP协议)

    目录         TCP/IP协议介绍         TCP/IP协议与WinSock网络编程接口的关系         WinSock编程简单流程          VC中socket编程   ...

  3. 计算机网络整理:UDP协议和TCP协议

    系列文章目录 HTTP协议和HTTPS协议 文章目录 系列文章目录 一.TCP/IP 各层协议 二.UDP协议和TCP协议 1.TCP和UDP的区别 2.UDP 协议 3.TCP 协议 1)特点 2) ...

  4. TCP协议的粘包问题

    TCP粘包 首先TCP作为面向字节流的传输方式,创建一个tcp的socket,同时在内核中创建一个发送缓冲区和一个接受缓冲区. 当调用write时,向会将数据写入到发送缓冲区中 如果发送的字节数太长, ...

  5. TCP协议的粘包问题(数据无边界性)及解决方法

    其他相关文章:http://c.biancheng.net/view/2350.html https://blog.csdn.net/seamanj/article/details/40063093 ...

  6. C#通过TCP实现 HL7医疗系统传输的协议,并使用MLLP协议接收HL7消息并解析

    本文讲解的是利用C# 对接医院HIS系统,接收HL7协议数据,并解析数据 之前和医院系统对接一直是使用数据库中间表,或者webservices等接口方式,上次遇到别人HIS提供了一份HL7的接口文档: ...

  7. C#通过TCP实现 HL7医疗系统传输的协议,并使用MLLP协议发送HL7消息

    本文章讲解C#-MLLP协议一头两尾的封装,HL7Spy工具的使用 小的公司是做健康管理软件的,之前对接的都是体检中心,从没有和His对接过接口.这次客户居然给我们抛了一个大难题- HL7医疗系统传输 ...

  8. 深度思考|TCP协议存在那些缺陷?

    作者:dog250 https://www.zhihu.com/question/47560918/answer/2302296292 TCP如何优化吞吐率,我很直接说优化不了,这让我甩开了很多令人尴 ...

  9. 异常处理、socke基于TCP协议编程

    一.异常处理 1.错误和异常 1.程序中难免出现错误,而错误分成两种 (1)语法错误(这种错误过不了Python解释器的语法检测,必须在程序执行前改正) #语法错误示范一 if#语法错误示范二 def ...

最新文章

  1. Centos7上yum安装mongodb4-2
  2. 默认析构函数与空析构函数并不完全等价
  3. spring security加载原理(基于springboot)
  4. DCMTK:查询/检索服务类用户(C-MOVE操作)
  5. 手机两列布局,正方形
  6. mac 连接hbase的图形化界面_MAC安装Hbase以及Hbase基本命令
  7. Node Express4.x 片段视图 partials
  8. 全球首款乘云而来的存储产品CDS诞生!
  9. 震惊!程序员要放弃 Python 了!?发生了啥?
  10. iOS开发之网络编程--6、NSURLSessionConfiguration笔记
  11. BZOJ1305 [CQOI2009]dance跳舞 【网络流】
  12. c语言 一个矩阵的乘积,c语言矩阵相乘
  13. 阶段3 1.Mybatis_12.Mybatis注解开发_6 mybatis注解开发一对一的查询配置
  14. cad有没有网页版_电脑中好用的免费CAD查看软件 满满的干货
  15. 破解使用radius实现802.1x认证的企业无线网络
  16. SVCHOST启动服务实战
  17. 论文阅读-LEARNED STEP SIZE QUANTIZATION
  18. 5个帮你改掉坏习惯的方法
  19. R语言神经网络量化交易模型
  20. 韩国社交软件Kakao Talk要开网络银行,社交软件+银行的模式会怎么转?

热门文章

  1. Linux(17)-Make编译,Configure
  2. C++(12)--函数基础:按值传递、传递数组、函数指针
  3. 《Java8实战》笔记汇总
  4. 启动linux的rpc服务的命令
  5. C++ primer 第11章 关联容器
  6. c++面向对象高级编程 学习六 虚函数
  7. 人生有五不:不等、不管、不看、不做、不给
  8. Vector用法详解
  9. 匈牙利命名法的优缺点
  10. linux下gdb单步调试