关于TCP长连接的一些简单代码

今天看到论坛上有个朋友要心跳包的实现代码。以前碰到过很多类似的问题了。当然,原帖位置是:

http://topic.csdn.net/u/20091020/08/e37c64c0-a416-4b08-a8aa-0d7f964eacb1.html?11914

 

现在谈谈自己对TCP长连接的一些粗浅见解。

1.首先,使用TCP发送信息,其底层也是将信息拆分成若干报文进行发送,在到达目的地按发送的先后顺序重新组装起来。

      其实,相对的每个报文都是有超时限制的,当然,当你不发送报文时,空闲也有超时限制。表现在java里,就是会有异常抛出。

2.其次,为了保持在无有效数据的交互情况下连接不会超时断开,我们从程序上,会人为的发送一些特殊的只用于维持连接不断的信息包。

      这些包,有的人称之为心跳包。我理解的心跳一词,貌似应该是用于信息同步的,当然,用于维持连接,我就不知道是否正确了。

      反正,暂且先这么理解吧。

3.既然,所发信息已经产生了分类的情况(最起码,心跳包就可归为一类),那么,势必牵扯到应用层协议的拟定了。

      也就是说,我们收发双方,要按照共同制定的信息格式进行收发信息,这样,才能相互理解所发的内容。

4.一般情况下,应用层协议,也会参照OSI的设计逻辑,将每个发送的信息分为包头和包体两个部分。

      为了简化解析难度,包头一般都是定长的,内容类型也都会有固定的格式。比如按照:包长、类型、序列号 这样的顺序一次发送。

      包体依据包头当中的类型字段的不同,而采用不同的格式记录信息。心跳包,一般包体为空,不必填充。

5.网络变成,历来都是考验程序员综合能力的一种挑战,尤其是针对初学者。对于多线程,网络连接,数据的协同处理,等等,

      必须要有相当的逻辑思维能力,与全局关。当然,我这方面还是不行,所以,代码也比较垃圾。

      本例中,为了完成心跳包的定时发送,其他代码不写的我都没有写,包头的序列号部分我也没写(写了这个,处理起来就比较麻烦了)。

 

好了,现在开始秀代码,希望更多的朋友能够提出一些好的见解,大家共同进步,共同成长。

 

一、先介绍两个工具类。用于基本数据类型和字节数组的相互转换。

 

二、介绍几个数据包的封装类。

 

三、客户端长连接的封装类

 

四,最后就是测试心跳包的简单代码了

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值