Java Socket通信及心跳包
来源:互联网 发布:军装照片软件 编辑:程序博客网 时间:2024/06/06 02:19
最近android项目中有需要用到Socket与服务器连接的项目,自己之前没有使用过Socket套接字这种方案,所以对Socket通信机制就是个也很有限,领导在会议上讲Socket通讯呢就是客户端和服务器端先进行一次握手,双方同意后就可以进行数据传送。我心里最反感别人说这句话如果是大学老师第一次给我们讲Socket概念的话,这话我乐意听。对这有开发经验的程序员竟然还这么跟我介绍Socket,我要的是方案的具体实施我不是问什么概念。C, bs一下。好了愤青完了该介绍项目中Socket通信的方案吧。
需求:1,一般Socket通信中服务器与客户端的关系都是一对多关系的。而且需要附带一个认证。
2,保证Socket长连接,网络状况是复杂的,不是单机演示Socket通信的demo。必须考虑到网络冲断的情况以及网络防护墙问题。有人认为,我通过一个死循环去read就可以就这么简单。实际上由于内外网防火墙的原因,Socket如果长时间不通信的话防火墙极有可能将其关闭。详见转载的关于socket长连接的心跳包。
心跳包:通信双方为保证通信畅通(不被防火墙关闭)或者使对方及时知道是否已经断线(一定时间内没有收到心跳数据视为已经断开)而定期给对方放送的某些特殊标识字符,这个字符可以根据双方自定义。假设对方定义TimeOut时间为60秒则您应在在六十秒之前发送一个数据(心跳)给他,对方收到心跳后,心跳恢复Timeout回复到60秒。比如我们设定“\r\n”为心跳数据,那么我们可以利用TimeTask定期发送这个消息给对方。这样心跳就完成了。例如服务器得到一个Socket socket.setKeepAlive(true); socket.setOOBInline(true);socket.setSoTimeout(40000);setSoTimeout就是定义心跳时间。如果40秒没有收到任何消息就断开。 在客户段我们用这样的代码给他发心跳
- /**
- * 启动心跳线程
- */
- private void startHeartBeatThread() {
- // 启动心跳线程
- heartBeatTimer = new Timer();
- heartBeatTask = new TimerTask() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- sendOrder("\r\n", false);
- }
- };
- heartBeatTimer.schedule(heartBeatTask, 25000, 25000);
- }
- private void sendOrder(String order){
- try {
- outputStream.write(order.getBytes("UTF-8"));
- outputStream.flush();
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- 这样我们就完成心跳发送了
转自:http://blog.csdn.net/lan_hz007/article/details/8789077
- Java Socket通信及心跳包
- Java Socket通信及心跳包
- Java Socket通信及心跳包
- Java Socket通信及心跳包
- 心跳包机制及Socket通信服务的心跳包
- 心跳包机制及Socket通信服务的心跳包
- 心跳包机制及Socket通信服务的心跳包
- 心跳包机制及Socket通信服务的心跳包
- 心跳包机制及Socket通信服务的心跳包
- 心跳包机制及Socket通信服务的心跳包
- 心跳包机制及Socket通信服务的心跳包
- java socket实现心跳包
- 关于Socket通信服务的心跳包
- 关于Socket通信服务的心跳包
- 关于Socket通信服务的心跳包
- java socket及java心跳
- Socket异步通信及心跳包同时响应逻辑分析(最后附Demo)。
- java socket——心跳包
- ubuntu学习
- apk签名的重要性和方法
- Codeforces 400D Dima and Bacteria(Floyd+并查集)
- 黑马程序员_交通灯管理系统需求与分析
- provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错
- Java Socket通信及心跳包
- 黑马程序员---模板方法设计模式
- 利用预渲染加速iOS设备的图像显示
- ios 模拟器未能安装此应用程序
- iOS状态条
- 黑马程序员_交通灯管理系统代码实现
- c#开发_Dev的关于XtraGrid的使用(GridControl小结)_Second
- 多条记录横着显示
- 解决中文乱码的问题要考虑的8个地方|(utf-8,用于抛砖引玉)