android java tcp通讯 plc工业大屏串口com通讯 十六进制数据的传递和数据的转换处理 工具类

                                          工具类:  tcp通讯  ,plc工业大屏串口com通讯  十六进制数据的传递和数据的转换处理

TCPConnection:
package com.zlhc.autocookie.utils.plcutils;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

public class TCPConnection {
    int port;
    String host_address;
    SocketInitListener sctListener;
    SendDataListener sendListener;
    ReveiceDataListener reveiceListener;
    private int readLength;
    private Thread thread;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {      //判断标志位
                case -1:
                    if (sctListener != null)
                        sctListener.connectFailure((String) msg.obj);
                    break;
                case 1:
                    if (sctListener != null)
                        sctListener.connectSuccess();
                    break;
                case -2:
                    if (sendListener != null)
                        sendListener.sendFailure((String) msg.obj);
                    break;
                case 2:
                    if (sendListener != null)
                        sendListener.sendSuccess();
                    break;
                case -3:
                    break;
                case 3:
                    if (reveiceListener != null)
                        reveiceListener.reveiceSuccess((List<String>) msg.obj);
                    break;
            }
        }
    };
    private OutputStream out;
    private Socket socket;
    private PrintWriter pintwriter;
    private Thread receiveThread;


    /**
     * 初始化tcp链接
     *
     * @param host_address
     * @param port
     */
    public TCPConnection init(String host_address, final int port, final SocketInitListener sctListener) {
        this.port = port;
        this.host_address = host_address;
        this.sctListener = sctListener;
        thread = new Thread(new Runable());
        thread.start();
        return this;
    }


    /**
     * 线程实现
     */
    class Runable implements Runnable {
        @Override
        public void run() {
            try {
                socket = new Socket(host_address, port);
                socket.setSoTimeout(Config.SOCKETTIMEOUT);
                out = socket.getOutputStream();
                pintwriter = new PrintWriter(out);
                sendHandler(1, "");
            } catch (UnknownHostException e) {
                sendHandler(-1, e.getMessage());
                e.printStackTrace();
            } catch (IOException e) {
                sendHandler(-1, e.getMessage());
                e.printStackTrace();
            }
        }
    }

    /**
     * 发送UI线程消息
     *
     * @param code
     * @param result
     */
    public void sendHandler(int code, Object result) {
        Message msg = Message.obtain();
        msg.obj = result;
        msg.what = code;
        handler.sendMessage(msg);
    }


    /**
     * 发送byte数组或者串数据
     *
     * @param data
     * @param sendDataListener
     */
    public void sendData(final Object data, SendDataListener sendDataListener) {
        this.sendListener = sendDataListener;
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    if (data instanceof byte[]) {
                        out.write((byte[]) data);
                        out.flush();
                    } else if (data instanceof String) {
                        pintwriter.write((String) data);
                        pintwriter.flush();
                    }
                    sendHandler(2, "");
                } catch (IOException e) {
                    sendHandler(-2, e.getMessage());
                    e.printStackTrace();
                }
            }
        }).start();
    }


    /**
     * 接受byte数据
     *
     * @param reveiceDataListener
     */
    public void reveiceData(ReveiceDataListener reveiceDataListener) {
        this.reveiceListener = reveiceDataListener;
        receiveThread = new Thread(new Runnable() {
            @Override
            public void run() {

                while (true) {
                    try {
                        Thread.sleep(500);
                        StringBuilder buffer = new StringBuilder();
                        String line = null;
                        byte[] arrs = null;
                        byte[] b = null;
                        InputStream is = null;
                        is = socket.getInputStream();
                        while (true) {
                            b = new byte[1024];
                            readLength = is.read(b);
                            sendHandler(3, ByteToString(b));
                            Log.e("", "返返回值:" + ByteToString(b).toString());
                        }

                    } catch (Exception e) {
                        sendHandler(-3, e.getMessage());
                        e.printStackTrace();
                    }
                }
            }
        });
        receiveThread.start();

    }


    /**
     * 断开连接
     */
    public void disconnect() {
        try {
            out.close();
            pintwriter.close();
            socket.close();
        } catch (IOException e) {

        }
    }


    /**
     * 转换
     *
     * @param bytes
     * @return
     */
    public  List<String> ByteToString(byte[] bytes) {
        List<String> listData = new ArrayList<>();
        for (int i = 0; i < readLength; i++) {
            String num = Integer.toHexString(byteToInteger(bytes[i]));
            if (num.length() == 1) {
                listData.add("0" + num);
            } else {
                listData.add(num);
            }
        }
        return listData;
    }


    /**
     * Description: 负数byte转正int <BR>
     */
    public static Integer byteToInteger(Byte b) {
        return 0xff & b;
    }

}
public interface SocketInitListener {
     void connectSuccess();
     void connectFailure(String exception);
}
public interface SendDataListener {
    void sendSuccess();

    void sendFailure(String exception);
}

public interface ReveiceDataListener {
     void reveiceSuccess(String result);
}

public class Config {

    //超时时间
    public static int SOCKETTIMEOUT = 3000;

}

猜你喜欢

转载自blog.csdn.net/csdn_lg_one/article/details/95229604