Android TCP的客户端(请求的发送和响应结果接收)
来源:互联网 发布:淘宝魔兽世界2元解封 编辑:程序博客网 时间:2024/05/22 15:22
Android TCP客户端发送请求并接收响应
<span style="font-size:14px;">import android.util.Log;import com.changhong.electric_controll.UDPResponseCallback;import com.changhong.electric_controll.connect.entity.entity.EquipResponse;import com.changhong.electric_controll.connect.entity.parser.QueryOrderBuilder;import com.changhong.electric_controll.util.ByteUtils;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.text.SimpleDateFormat;import java.util.Date;/** * Created by zhangning on 2016/5/24. */public class TCPReceive extends Thread{ private Socket connectsocket; private String IPAddress; private int Port; private UDPResponseCallback mUDPResponseCallback; //自定义接口,用于再activity中处理接收的结果,如果不用,可以直接删除 private boolean isSuccess=false; private String lastResult; private byte[] senddata; private byte[] acceptdata; private int callbacktype; private static long INTERVAL_TIME=15*1000; public TCPReceive(UDPResponseCallback udpResponseCallback,Socket socket,String IPAddress,int port,byte[] senddata,int callbacktype){ this.connectsocket=socket; this.IPAddress=IPAddress; this.Port=port; this.mUDPResponseCallback=udpResponseCallback; this.senddata=senddata; this.callbacktype=callbacktype; } public TCPReceive(Socket socket,String IPAddress,int port,byte[] senddata,int callbacktype){ this.connectsocket=socket; this.IPAddress=IPAddress; this.Port=port; this.senddata=senddata; this.callbacktype=callbacktype; } @Override public void run() { if(callbacktype==0){ onebyone(); } else if(callbacktype == 1){ moretomore(); } else if(callbacktype==2){ equitupload(); } } /**一应一答模式(所谓的短连接模式)**/ public void onebyone(){ buildConnect(); //建立与服务器的连接 if(isSuccess){ senddata(senddata, connectsocket); } } /**循环发送请求和接收响应**/ public void moretomore(){ buildConnect(); //建立与服务器的连接 while(true) { try{ if(connectsocket.isClosed()){ break; } if (isSuccess) { senddata(senddata, connectsocket); } Thread.sleep(INTERVAL_TIME); }catch(InterruptedException e){ e.printStackTrace(); } } } /**循环接收服务器传过来的数据**/ public void equitupload(){ buildConnect(); //建立与服务器的连接 if(isSuccess) { while (true) { try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } Log.i("Data", "接收数据"); if(!connectsocket.isClosed()) { acceptdata(connectsocket); Log.i("Data", "接收响应数据结束++++++++++++++++"); } else { break; } } } } /**建立与服务器的连接并发送请求**/ public void buildConnect(){ try { Log.i("Data", " socket begin connect ++++++++++"); Log.i("Data","tcp connect ,ip = "+IPAddress+"Port = "+Port); Log.i("Data","the send data="+ByteUtils.bytesToHexString(senddata)); //connectsocket=new Socket(IPAddress,Port); //connectsocket.setSoTimeout(10*1000); //设置连接超时时间 Log.i("Data", "connectsocket.isConnected=" + connectsocket.isConnected()); //是否关闭 Log.i("Data", "connectsocket.isClosed=" + connectsocket.isClosed()); //是否连接 Log.i("Data", "connectsocket.isInputShutdown=" + connectsocket.isInputShutdown()); //是否关闭输入流 Log.i("Data", "connectsocket.isOutputShutdown=" + connectsocket.isOutputShutdown()); //是否关闭输出流 Log.i("Data", "连接请求已发送"); if(connectsocket.isConnected()&&(!connectsocket.isClosed())){ //表明当前连接成功 Log.i("Data", "连接成功,准备发送信息"); isSuccess = true; } else{ try { Log.i("Data","断开连接,重新连接"); Thread.sleep(1000); connectsocket=new Socket(IPAddress,Port); if(connectsocket.isConnected()&&(!connectsocket.isClosed())){ Log.i("Data","尝试重新连接成功"); isSuccess=true; } else{ Log.i("Data","尝试重新连接失败"); isSuccess = false; mUDPResponseCallback.onResponse(null,isSuccess); //直接返回结果 return; } }catch(InterruptedException e){ isSuccess=false; mUDPResponseCallback.onResponse(null,isSuccess); //将返回结果传递给callback去解析 e.printStackTrace(); } return; } }catch(IOException e){ isSuccess=false; mUDPResponseCallback.onResponse(null,isSuccess); //将返回结果传递给callback去解析 e.printStackTrace(); } } /**发送数据**/ public void senddata(byte[] senddata,Socket connectsocket1){ synchronized(this) { try { ByteArrayInputStream byteArrayinputstream = new ByteArrayInputStream(senddata); Log.i("Data", "read line......" + ByteUtils.bytesToHexString(senddata)); if (byteArrayinputstream != null) { BufferedReader in = new BufferedReader(new InputStreamReader(byteArrayinputstream)); Log.i("Data", "向服务器发送数据,发送时间="+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); if (connectsocket1.isClosed()) { connectsocket1.close(); } else { connectsocket1.getOutputStream().write(senddata); Log.i("Data", "获取输出流成功"); } } } catch (IOException e) { e.printStackTrace(); } } } /**接收数据**/ public byte[] acceptdata(Socket connectsocket) { byte[] acceptdata1=null; try { InputStream istream=null; //Thread.sleep(1000); if (connectsocket.isConnected()) { if (!connectsocket.isInputShutdown()) { istream=connectsocket.getInputStream(); int datalength=istream.available(); Log.i("Data","接收到的字节数"+datalength); if(datalength >0) { acceptdata1 = new byte[datalength]; istream.read(acceptdata1); if (acceptdata1 != null) { isSuccess = true; lastResult = ByteUtils.bytesToHexString(acceptdata1); Log.i("Data", "the lastresult=" + lastResult); mUDPResponseCallback.onResponse(lastResult, isSuccess); //将返回结果传递给callback去解析 } } } else { isSuccess=false; Log.i("Data", "connectsocket 失败 isInputShutdown=false"); mUDPResponseCallback.onResponse(null, isSuccess); //将返回结果传递给callback去解析 } } } catch(IOException e){ e.printStackTrace(); } return acceptdata1; }}</span><strong style="font-size: 12pt;"></strong>
0 0
- Android TCP的客户端(请求的发送和响应结果接收)
- HTTP发送请求和接收响应的整个流程
- Android HTTP实例:发送请求和接收响应的小demo
- Android HTTP实例 发送请求和接收响应
- Android HTTP实例 发送请求和接收响应
- Android Http连接 实例:发送请求和接收响应
- 一个发送xml远程请求和接收xml请求结果并置入DataSet的方法
- HTTP的通信的 发送请求、接收响应
- python通过get,post方式发送http请求和接收http响应的方法
- python通过get,post方式发送http请求和接收http响应的方法
- python通过get,post方式发送http请求和接收http响应的方法
- TCP的数据发送和接收
- TCP的数据发送和接收
- tcp发送和接收的原理
- TCP与UDP的异同(服务端接收数据,客户端发送数据)
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- TCP与UDP的异同(服务端接收数据,客户端发送数据)
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- Android开发中完全退出程序的三种方法
- linux高级编程基础系列:线程间通信
- adb push 与 adb install 区别(两种利用adb安装APK的方法)
- Java纪念贴-正式开始学习Java之路
- LTE下行物理层传输机制(5)-DCI格式的选择和DCI1A
- Android TCP的客户端(请求的发送和响应结果接收)
- 观察者模式
- 更新视图
- PostScript —— 一种编程语言
- C# 设置应用程序开机自动运行
- 深入分析LinkedList实现原理
- DDoS防护终极指南:这是个商业问题
- python 笔记
- 分布式日志收集收集系统:Flume