Java实现socket客户端长连接

import com.teruisa.jinji100.utils.HexUtil;
import com.teruisa.jinji100.utils.SocketUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;/*** socket 长连接:连接建立后不会主动断开,可以持续收发消息*/
public class ClientThread {private final Logger logger = LoggerFactory.getLogger(ClientThread.class);private String hosts;private int port;private Socket socket = null;private OutputStream os = null;private InputStream is = null;public ClientThread(String hosts, int port) {this.hosts = hosts;this.port = port;try {this.socket = new Socket(hosts, port);this.os = socket.getOutputStream();this.is = socket.getInputStream();SocketThread socketThread = new SocketThread();socketThread.start();logger.info("创建socket连接成功,address:{}:{}", hosts, port);} catch (UnknownHostException e) {logger.error("创建socket连接UnknownHost异常", e);} catch (IOException e) {logger.error("创建socket连接IO异常", e);}}/*** 办公灯光* @param msg* @return*/public String sendLampComd(String msg) {String receiveMsg = "";PrintWriter pw = null;BufferedReader br = null;try {pw = new PrintWriter(os);pw.write(msg);pw.flush();socket.shutdownOutput();// 从服务器接收的信息br = new BufferedReader(new InputStreamReader(is));receive(br);} catch (IOException e) {logger.error("IOException", e);} finally {// 关闭资源SocketUtil.close(br, null, is, os, socket);}return receiveMsg;}/*** 会议室灯光* @param msg* @return*/public String sendMeetingComd(String msg) {byte[] data = HexUtil.hexStrToBinaryStr(msg);return sendCurtainComd(data);}/*** 窗帘* @param data* @return*/public String sendCurtainComd(byte[] data) {String receiveMsg = "";BufferedReader br = null;try {os.write(data);socket.shutdownOutput();br = new BufferedReader(new InputStreamReader(is));receive(br);} catch (IOException e) {logger.error("IOException", e);} finally {// 关闭资源SocketUtil.close(br, null, is, os, socket);}return receiveMsg;}private String receive(BufferedReader br) throws IOException {// 从服务器接收的信息String receiveMsg = "";String reply;while((reply = br.readLine()) != null){logger.info("设备中控返回信息:{}", reply);receiveMsg = reply;}return receiveMsg;}/*** 发送心跳包*//*public void sendHeartbeat() {try {String heartbeat = "ping\r\n";new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(10 * 1000);// 10s发送一次心跳os.write(heartbeat.getBytes());os.flush();} catch (Exception e) {logger.error("发送心跳异常", e);}}}}).start();} catch (Exception e) {logger.error("发送心跳异常", e);}}*/private class SocketThread extends Thread {@Overridepublic void run() {long startTime = System.currentTimeMillis();//sendHeartbeat();while (true) {try {if (socket == null || socket.isClosed()) {socket = new Socket(hosts, port); // 连接socketos = socket.getOutputStream();}Thread.sleep(100);is = socket.getInputStream();int size = is.available();if (size <= 0) {if ((System.currentTimeMillis() - startTime) > 3 * 10 * 1000) { // 如果超过30秒没有收到服务器发回来的信息,说明socket连接可能已经被远程服务器关闭
//                            socket.close(); // 这时候可以关闭socket连接
//                            startTime = System.currentTimeMillis();}continue;} else {startTime = System.currentTimeMillis();}byte[] resp = new byte[size];is.read(resp);String response = new String(resp, "utf-8");logger.info("连接成功:{}:{},server端返回结果:{}", hosts, port, response);} catch (Exception e) {e.printStackTrace();try {socket.close();is.close();os.close();} catch (IOException e1) {e1.printStackTrace();}}}}}
}

Java实现socket 客户端 长连接相关推荐

  1. java web tcp长连接超时时间_常用java web容器http长连接超时设置

    1.http长连接相关知识 http长连接对我们来说并不陌生,但长连接并不是永远不会关闭.对于HTTP长连接需要注意下面几点:keepalive_timeout指的是web服务器发送完最后一个响应报文 ...

  2. Socket Client 长连接及心跳检测

    简介: 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象.一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制.从所处的地位来讲,套接 ...

  3. 微信 短连接 长连接服务器,Socket,http长连接与短连接

    TCP/IP TCP/IP是个协议组,可分为三个层次:网络层,传输层和应用层. 在网络层有IP协议,ICMP协议,ARP协议,RARP协议和BOOTP协议. 在传输层中有:TCP协议与UDP协议. 在 ...

  4. 网页 服务器长连接超时,服务器客户端长连接超时时间吗

    服务器客户端长连接超时时间吗 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. R ...

  5. java如何实现Socket的长连接和短连接

    讨论Socket必讨论长连接和短连接 一.长连接和短连接的概念 1.长连接与短连接的概念:前者是整个通讯过程,客户端和服务端只用一个Socket对象,长期保持Socket的连接:后者是每次请求,都新建 ...

  6. java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接 ...

  7. (java)socket全双工长连接通信实例

    (借鉴备忘)直接上代码: client: import java.io.InputStreamReader; import java.io.OutputStreamWriter; import jav ...

  8. android socket 长连接_TCP/IP,http,socket,长连接,短连接

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 上一篇:这300G的Java资料是我师傅当年给我的,免费分享给大家 下一篇:这200G的Java实战资料是我师傅当年教 ...

  9. Socket的长连接和短连接

    一.长连接和短连接的概念 1.长连接与短连接的概念:前者是整个通讯过程,客户端和服务端只用一个Socket对象,长期保持Socket的连接:后者是每次请求,都新建一个Socket,处理完一个请求就直接 ...

  10. http和socket之长连接和短连接区别

    TCP/IP  TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.  在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议.  在传输层中有TCP协议与UDP协议. ...

最新文章

  1. 597个智慧城市相关试点将临大考
  2. 为什么对 Java 性能调优最后都像在调 you?
  3. 卸载后的mysql和navicat怎么清除干净_清除电脑“牛皮癣 ”,带你回归清爽体验~...
  4. 问题:Unable to find a 'userdata.img' file for ABI armeabi to copy into the AVD folder.
  5. mybatis-generator自动生成mapper
  6. mysql php7安装配置_centos7无网络下安装部署php7.1.33+mysql5.7.28+apache2.4.6-Go语言中文社区...
  7. 如何使用 WinUSB 与 USB 设备 (USBDevice) 通信
  8. 谈一下ACM的入门书籍及方法
  9. 阿里云张献涛:如何修炼云计算的弹指神通
  10. VirualBox安装XP_64bit+中文语言包
  11. SmartAdmin(SmartAdmin_v1.5.2)
  12. 帝国php获取栏目id,帝国CMS如何获取子栏目
  13. idea中各种颜色的含义
  14. win10换win7系统步骤操作详解分享
  15. 多重剪贴板工具 CLCL
  16. systemverilog中实现饱和截位和饱和截位的分析
  17. 《队长说得队》第三次作业:团队项目的原型设计
  18. 项目管理计算-- PV、EV、AC、BAC、EAC、ETC等计算公式含义
  19. 网管服务器型号序列号查询,网管员实战手册:寻找最可靠DNS服务器
  20. php discuz 顶,discuz模拟登录实现自动顶帖php程序_PHP教程

热门文章

  1. 洛谷 P3324 [SDOI2015]星际战争 二分答案+网络流
  2. Ubuntu 设置PTP时间同步
  3. 服务器流量超载怎么修复,网站服务器超出流量怎么办
  4. VNC访问阿里云服务器
  5. 三只松鼠上半年营收41亿:净利降77% IDG一年套现超12亿
  6. Visual Studio 报错:未能加载工具箱项,将从项目中移除
  7. Quorum企业以太坊搭建区块链记录系列
  8. SQL考试练习题及全部答案3
  9. 虚拟局域网VLAN,trunk的各种使用
  10. HR 问你为什么离职时是什么意思