工具类: 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;
}
博客介绍了工具类相关内容,涉及TCP通讯、PLC工业大屏串口COM通讯,以及十六进制数据的传递和转换处理,聚焦于信息技术领域的通讯与数据处理。
800





