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
原创粉丝点击