TCP应用程序通信协议的处理

flyfish 2015-6-29

一 流式处理

TCP是一种流协议(stream protocol)。TCP数据是以字节流的形式传递给接收者的,没有固有的”报文”或”报文边界”或者用户可见的”分组”的概念。

它仅仅是传送了一个字节流,我们无法准确地预測在一个特定的读操作中会返回多少字节。虽然网络层数据在节点之间是以IP分组的形式传输的,但分组中的数据量与send调用中传送给TCP多少数据并没有直接关系。并且,接收程序也没有什么可靠的方法能够推断数据是怎样分组的,由于在两次recv调用之间可能会有多个分组到来。假设你的应用程序的设计与TCP对数据的分组方式有所关联。那么请又一次设计应用程序。

处理”粘包”。“分包”正是由于错误了理解了TCP传输数据模型。当以字节流处理时这个问题就不存在了。

二 检測client是否在线

由于TCP无法将连接的丢失马上通知应用程序

TCP有一种保持活跃(keep-alive)的机制能够用来检測死连接,但这相应用程序来说,通常没什么用处。保持活跃机制并没有真正成为连接监測机制的主要原因之中的一个就是默认的时间区间太长了。

能够使用检測方式比較灵活

1 心跳检測:client直接发送给server“我在线”的信息

2 心跳检測:client连接到server之后,会向server发送一个port号,之后在这个port上监听来自server的心跳连接

3 在读操作上设置一个定时器,这种话,假设client在某段时间区间内没有发出请求,server就假定client已经不存在了

三 採用防御性编程以防止client的不友好操作

1检验client的有效数据,防止发生非预期行为。

2检查缓冲区的溢出情况

參考《TCP/IP高效编程:改善网络程序的44个技巧》

最新文章

  1. Unity3D LuaBundleLoader(基于cslua)
  2. 微信中修改title
  3. Windows下使用性能监视器监控SqlServer的常见指标
  4. 【转载】CSS 盒子模型
  5. Android Volley和Gson实现网络数据加载
  6. java socket实现全双工通信
  7. Android利用Http下载文件
  8. LeetCode 338
  9. 【Nutch2.2.1基础教程之1】nutch相关异常
  10. Python-windows服务-重启自动化
  11. Oracle小技术集锦
  12. 【JAVASCRIPT】React学习-如何构建一个组件
  13. C#应用程序隐藏调用bat脚本
  14. babel7-按需加载polyfill
  15. Git Log描述乱码问题解决方法
  16. css布局:左边定宽、右边自适应
  17. Object.defineProperties()与Proxy对象代理
  18. iView 的分页结合表格用法
  19. 剑指Offer 52. 正则表达式匹配 (字符串)
  20. .net 事务处理

热门文章

  1. Linux Context , Interrupts 和 Context Switching 说明【转】
  2. cannot load shared object file undefined symbol
  3. 非常好!!!Linux源代码阅读——环境准备【转】
  4. electron 安装使用
  5. zabbix报警邮件qq邮箱收不到的问题
  6. PHP中利用PHPMailer使用QQ邮箱实现邮件发送
  7. 用jmeter进行多用户并发压力测试
  8. 【NOI2016】优秀的拆分
  9. 远程debug---远程服务器参数设置
  10. iOS Undefined symbols for architecture arm64解决办法