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

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

flyfish 2015-6-29

一 流式处理
TCP是一种流协议(stream protocol)。TCP数据是以字节流的形式传递给接收者的,没有固有的”报文”或”报文边界”或者用户可见的”分组”的概念。
它只是传送了一个字节流,我们无法准确地预测在一个特定的读操作中会返回多少字节。尽管网络层数据在节点之间是以IP分组的形式传输的,但分组中的数据量与send调用中传送给TCP多少数据并没有直接关系。而且,接收程序也没有什么可靠的方法可以判断数据是如何分组的,因为在两次recv调用之间可能会有多个分组到来。如果你的应用程序的设计与TCP对数据的分组方式有所关联,那么请重新设计应用程序。
处理”粘包”,“分包”正是因为错误了理解了TCP数据传输模型,当以字节流处理时这个问题就不存在了。

二 检测客户端是否在线
因为TCP无法将连接的丢失立即通知应用程序
TCP有一种保持活跃(keep-alive)的机制可以用来检测死连接,但这对应用程序来说,通常没什么用处。保持活跃机制并没有真正成为连接监测机制的主要原因之一就是默认的时间区间太长了。

可以使用检测方式比较灵活
1 心跳检测:客户端直接发送给服务器“我在线”的信息
2 心跳检测:客户端连接到服务器之后,会向服务器发送一个端口号,之后在这个端口上监听来自服务器的心跳连接
3 在读操作上设置一个定时器,这样的话,如果客户端在某段时间区间内没有发出请求,服务器就假定客户端已经不存在了

三 采用防御性编程以防止客户端的不友好操作

1检验客户端的有效数据,防止发生非预期行为。
2检查缓冲区的溢出情况

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西笑生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值