概述
安卓使用tcp 建立心跳连接:
方法如下:
private void initTcpConnect(){
//先初始化timerTask
if (tcpTask != null){
tcpTask.cancel();
tcpTask= null;
}
if (tcpTimer== null){
tcpTimer= new Timer();
}
Thread tcpThread= new Thread(new Runnable() {
@Override
public void run() {
try {
if (tcpSocket != null){
if (tcpSocket.isConnected()){
tcpSocket.close();
tcpSocket= null;
}
}
if (tcpSocket == null){
tcpSocket= new Socket();
System.out.println("->创建 tcp");
tcpSocket.connect(new InetSocketAddress(Constants.NEW_SERVER_IP, Constants.tcp_port), 2000);
}
tcpOutputStream= tcpSocket.getOutputStream();
tcpInputStream = tcpSocket.getInputStream();
tcpReader= new BufferedReader(new InputStreamReader(tcpSocket.getInputStream()));
tcpWriter = new BufferedWriter(new OutputStreamWriter(tcpSocket.getOutputStream()));
if (!tcpSocket.isConnected()){
System.out.println("->tcp 连接失败");
return;
}
System.out.println("->tcp是否连接= "+ tcpSocket.isConnected());
while (tcpSocket.isConnected()){
// byte[] bt= new byte[1024];
// int len= tcpInputStream.read(bt);
// System.out.println("->len= "+ len);
//
// System.out.println("->len= "+ len);
// if (len> 0){
// byte[] bs= new byte[len];
// System.arraycopy(bt, 0, bs, 0, len);
// String str= new String(bs, "UTF-8");
// if (str != null){
// Message msg= tcpHandler.obtainMessage();
// msg.obj= str;
// msg.what= 500;
// tcpHandler.sendMessage(msg);
//
// }
// }
String str= tcpReader.readLine();
// if (str != null){
// Message msg= tcpHandler.obtainMessage();
// msg.obj= str;
// msg.what= 500;
// tcpHandler.sendMessage(msg);
// }
//第二种方式
JSONObject obj= null;
try {
obj= new JSONObject(str);
} catch (JSONException e) {
e.printStackTrace();
}
if (obj != null){
if (obj.has("code") && obj.has("msg")){
try {
if (obj.getInt("code")== 100 && obj.getString("msg").equalsIgnoreCase("Handshake")){
clientId= obj.getInt("clientId");
tcpTask= new TimerTask() {
@Override
public void run() {
String uuid = SPManage.getUUIDInfo(BaseService.this);
initUdpConnection11(uuid, clientId); //发送json 数据
//tcp 的方式处理
// else if (code1 == 1 && isTcpConnect) {//心跳包
// System.out.println("1111----tcp连接: code= 1");
// code = 1;
// isConnected = true;
handler.removeMessages(111);
handler.sendEmptyMessage(67);//发送心跳包成功才能发送数据 不然提示uuid过期或不正确
// whileSendInstruct11();
whileSendInstruct();
// if(!TextUtils.isEmpty(send_data)) {
// sendData(send_data);
// }
// }
// else if(code1== 2 && isTcpConnect){//心跳包
// System.out.println("1111----tcp连接: code= 2");
// if(obj.has("info")){
// code = 2;
// String info= obj.getString("info");
// if(info.contains("心跳更新成功tcp") || info.contains("心跳包更新成功tcp")){
// tcpCount = 0;
// handler.removeMessages(MSG_SERVER_TCP_CLOSE);
// }
// }
// }
}
};
tcpTimer.schedule(tcpTask, 1, 10000);
}
} catch (JSONException e) {
e.printStackTrace();
}
}else {
if (obj.has("code")){
try {
int code = obj.getInt("code");
Message msg= tcpHandler.obtainMessage();
switch (code){
case 1:
System.out.println("->tcp 接收到1: "+ obj.toString());
break;
case 2:
System.out.println("->tcp 接收: "+ obj.toString());
break;
case 10:
msg.what= 501;
msg.obj= obj.toString();
tcpHandler.sendMessage(msg);
break;
case 11:
System.out.println("->tcp 接收: "+ obj.toString());
break;
case 12:
System.out.println("->tcp 接收: "+ obj.toString());
break;
case -1:
System.out.println("->tcp 接收: "+ obj.toString());
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}// obj 不为null
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
tcpThread.start();
}
最后
以上就是清新冰棍为你收集整理的安卓常见建立心跳连接的全部内容,希望文章能够帮你解决安卓常见建立心跳连接所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复