1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
| public class TcpSocketHelper { private String mTag = "TcpSocketHelper"; private Socket socket; private boolean _connect; private ReceiveThread mReceiveThread; private boolean receiveStop; private Date lastKeepAliveOkTime; private OnRecivedListener mRecivedListener; private String mIpAddr = "http://tcp.lewei50.com"; private int mPort = 9960;
public void startConnect(String ipAddr, int port){ LogUtil.d(mTag, "准备链接..."); this.mIpAddr = ipAddr; this.mPort = port; InetAddress serverAddr; try { socket = new Socket(ipAddr, port); LogUtil.d(mTag, "准备链接..."); _connect = true; mReceiveThread = new ReceiveThread(); receiveStop = false; mReceiveThread.start(); LogUtil.d(mTag, "链接成功...");
} catch (Exception e) { LogUtil.d(mTag, "链接出错..." + e.getMessage()); e.printStackTrace(); } }
public void closeConnect(){ if (socket != null){ try { socket.close(); socket = null; } catch (IOException e) { e.printStackTrace(); } } }
public void KeepAlive() { if (lastKeepAliveOkTime != null) { LogUtil.d(mTag, "上次心跳成功时间:"+ DateFormat.format("yyyy-MM-dd HH:mm:ss", lastKeepAliveOkTime)); Date now = Calendar.getInstance().getTime(); long between = (now.getTime() - lastKeepAliveOkTime.getTime()); if (between > 60 * 1000) { LogUtil.d(mTag, "心跳异常超过40,重新连接:"); lastKeepAliveOkTime = null; socket = null; }
} else { lastKeepAliveOkTime = Calendar.getInstance().getTime(); }
if (!checkIsAlive()) { LogUtil.d(mTag, "链接已断开,重新连接."); startConnect(mIpAddr, mPort); } }
public boolean checkIsAlive() { if (socket == null||!socket.isConnected()) return false; return true;
}
public void sendmessage(String msg) { boolean isAlive = checkIsAlive(); if (!isAlive) return; LogUtil.d(mTag, "准备发送消息:" + msg); try { if (socket != null && socket.isConnected()) { if (!socket.isOutputShutdown()) {
OutputStream os=socket.getOutputStream(); PrintWriter outStream=new PrintWriter(os, true); outStream.print(msg); outStream.flush(); } } LogUtil.d(mTag, "发送成功!"); } catch (Exception e) { e.printStackTrace(); } }
public void setmRecivedListener(OnRecivedListener mRecivedListener) { this.mRecivedListener = mRecivedListener; }
class ReceiveThread extends Thread{
@Override public void run() { while (true) { try { sleep(2000); if (socket != null && socket.isConnected()) { InputStream isRead = socket.getInputStream(); byte[] buffer = new byte[isRead.available()]; isRead.read(buffer); String responseInfo = new String(buffer); if(responseInfo != null&&!responseInfo.equals("")){ LogUtil.d("TcpManager", "返回:"+responseInfo); mRecivedListener.onRecived(responseInfo); }
lastKeepAliveOkTime = Calendar.getInstance().getTime(); KeepAlive();
continue; } else { if (socket != null) LogUtil.d(mTag, "链接状态:" + socket.isConnected()); }
} catch (Exception e) { LogUtil.d(mTag, "监听出错:" + e.toString()); e.printStackTrace(); } } } } }
|