zoukankan      html  css  js  c++  java
  • socket长连接实现


    package
    com.adao.simulater.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; /** */ public class Connect { private static final ThreadLocal<Socket> threadConnect = new ThreadLocal<Socket>(); private static final String HOST = "127.0.0.1"; private static final int PORT = 8511; 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 KeepThread()); 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 KeepThread 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 r = inStr.read(b); if (r > -1) { String str = new String(b); 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(); } } }

     完美

  • 相关阅读:
    【酷熊科技】工作积累 ----------- 随机数 (带权重的随机数)
    【酷熊科技】工作积累 ----------- unity scrollview 点击后会有偏移问题(有图片)
    cocos2dx混合模式应用———制作新手引导高亮区域 (2.2.0)
    3.20 内存及效率的一些总结 3.21 设置竖屏 3.22 CCLOG与CCLog区别
    3.18 CCProgressTo 进度计时器
    3.16 draw 3.17 更新函数
    3.15 获取当前设备语言
    CCControlSwitch 、CCControlSlider、CCControlButton
    CCEditBox
    CCTextFieldTTF 与 5种常用CCMenuItem
  • 原文地址:https://www.cnblogs.com/adao21/p/13208650.html
Copyright © 2011-2022 走看看