关于TCP长连接的一些简单代码
来源:互联网 发布:淘宝口令红包怎么设置 编辑:程序博客网 时间:2024/05/22 10:36
今天看到论坛上有个朋友要心跳包的实现代码。以前碰到过很多类似的问题了。当然,原帖位置是:
http://topic.csdn.net/u/20091020/08/e37c64c0-a416-4b08-a8aa-0d7f964eacb1.html?11914
现在谈谈自己对TCP长连接的一些粗浅见解。
1.首先,使用TCP发送信息,其底层也是将信息拆分成若干报文进行发送,在到达目的地按发送的先后顺序重新组装起来。
其实,相对的每个报文都是有超时限制的,当然,当你不发送报文时,空闲也有超时限制。表现在java里,就是会有异常抛出。
2.其次,为了保持在无有效数据的交互情况下连接不会超时断开,我们从程序上,会人为的发送一些特殊的只用于维持连接不断的信息包。
这些包,有的人称之为心跳包。我理解的心跳一词,貌似应该是用于信息同步的,当然,用于维持连接,我就不知道是否正确了。
反正,暂且先这么理解吧。
3.既然,所发信息已经产生了分类的情况(最起码,心跳包就可归为一类),那么,势必牵扯到应用层协议的拟定了。
也就是说,我们收发双方,要按照共同制定的信息格式进行收发信息,这样,才能相互理解所发的内容。
4.一般情况下,应用层协议,也会参照OSI的设计逻辑,将每个发送的信息分为包头和包体两个部分。
为了简化解析难度,包头一般都是定长的,内容类型也都会有固定的格式。比如按照:包长、类型、序列号 这样的顺序一次发送。
包体依据包头当中的类型字段的不同,而采用不同的格式记录信息。心跳包,一般包体为空,不必填充。
5.网络变成,历来都是考验程序员综合能力的一种挑战,尤其是针对初学者。对于多线程,网络连接,数据的协同处理,等等,
必须要有相当的逻辑思维能力,与全局关。当然,我这方面还是不行,所以,代码也比较垃圾。
本例中,为了完成心跳包的定时发送,其他代码不写的我都没有写,包头的序列号部分我也没写(写了这个,处理起来就比较麻烦了)。
好了,现在开始秀代码,希望更多的朋友能够提出一些好的见解,大家共同进步,共同成长。
一、先介绍两个工具类。用于基本数据类型和字节数组的相互转换。
二、介绍几个数据包的封装类。
三、客户端长连接的封装类
四,最后就是测试心跳包的简单代码了
- 关于TCP长连接的一些简单代码
- 关于 PHP MySQL 长连接、连接池的一些探索
- 简单的长连接
- TCP的长连接与短连接
- TCP的长连接与短连接
- TCP的长连接与短连接
- TCP的长连接和短连接
- TCP的长连接与短连接
- TCP的长连接和短连接
- 简单的socket长连接
- TCP/IP通信程序设计 关于长连接和短连接
- TCP/IP通信程序设计 关于长连接和短连接
- Java实现的TCP长连接服务
- TCP长连接服务的Java实现
- TCP长连接服务的Java实现
- TCP长连接的相关问题
- 关于Smail代码的一些简单讲解
- mysql 关于php mysql长连接、连接池的一些探索
- 初学Labview遇到的一些问题
- opencv保存图象
- 开张了
- [转]64位Windows和32位Windows有何不同?
- DataFactory生成大数据量
- 关于TCP长连接的一些简单代码
- 动态生成JS做为数据源提高性能
- H.264概述
- 指针与函数
- 条款17:以独立语句将newed对象置入智能指针
- 静态链表实现(A-B)U(B-A)
- Win7 快捷键
- 使用vnc远程登录linux
- ORACLE TO_CHAR()函数如何获取自然周