Socket心跳包保持长连接

来源:互联网 发布:linux 文件读权限 编辑:程序博客网 时间:2024/04/28 00:59
package com.sk.irwifi;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;/** * Created by XYSM on 2017/9/19. */public class Connect {    private static final ThreadLocal<Socket> threadConnect = new ThreadLocal<Socket>();    private static final String HOST = "192.168.1.102";    private static final int PORT = 8899;    private static Socket client;    private static OutputStream outStr = null;    private static InputStream inStr = null;    private static Thread tRecv = new Thread(new RecvThread());    private static Thread tKeep = new Thread(new KeepAliveThread());    public static void connect() throws UnknownHostException, IOException  {        client = threadConnect.get();        if(client == null){            client = new Socket(HOST, PORT);            threadConnect.set(client);            tKeep.start();            System.out.println("========心跳连接开始!========");        }        //获取套接字的输出流        outStr = client.getOutputStream();        //获取套接字的输入流        inStr = client.getInputStream();    }    /**     *断开连接     * */    public static void disconnect() {        try {            outStr.close();            inStr.close();            client.close();        } catch (IOException e) {            e.printStackTrace();        }    }    private static class KeepAliveThread implements Runnable {        public void run() {            try {                System.out.println("=====================开始发送心跳包==============");                while (true) {                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                    System.out.println("发送心跳数据包");                    outStr.write("send heart beat data package!".getBytes());                }            } catch (IOException e) {                e.printStackTrace();            }        }    }    private static class RecvThread implements Runnable {        public void run() {            try {                System.out.println("==============开始接收数据===============");                while (true) {                    byte[] b = new byte[1024];                    int len = inStr.read(b);                    if(len>0){                        //设置编码                        String str = new String(b, "utf-8");                        System.out.println( str );                    }                }            } catch (IOException e) {                e.printStackTrace();            }        }    }    public static void main(String[] args) {        try {            Connect.connect();            tRecv.start();        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

效果如下:

这里写图片描述

原创粉丝点击