在这里插入代码片
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Date;
import static Code_conversion.bytesToHexString;
public class Receiving_message_Server extends Thread {
public static ArrayList<Socket> sockets = new ArrayList<Socket>();
private Socket_data_service socket_data_service = new Socket_data_serviceimpl();
private Socket server;
private ServerSocket serverSocket;
public Receiving_message_Server() {
}
public Receiving_message_Server(int port) throws IOException {
serverSocket = new ServerSocket(port);
}
public void run() {
while (true) {
try {
System.out.println("等待远程连接.....");
server = serverSocket.accept(); // 阻塞监听端口等待请求连接
sockets.add(server);
System.out.println("远程主机地址:" + server.getRemoteSocketAddress());
System.out.println("连接时间:" + new Date());
InputStream in = server.getInputStream(); // 获取客户端发送的流
BufferedInputStream bis = new BufferedInputStream(in); // 流存放缓冲区
DataOutputStream dos = new DataOutputStream(out); // 获取缓冲区流数据
byte[] bytes = new byte[1]; // 一次读取一个byte
String ret = "";
while (dis.read(bytes) != -1) {
ret += bytesToHexString(bytes) + " "; //调用字节转化16进制字符串方法
if (dis.available() == 0) {
//一个请求
System.out.println("收到报文数据: " + ret);
ret = "";
}
}
in.close();
dos.close();
bis.close();
server.close(); // 关闭连接
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
public static void main(String[] args) {
int port = 8888; // 监听端口
try {
Thread t = new Receiving_message_Server(port); // 线程初始化
t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这里插入代码片
public class Code_conversion {
/**
* 二进制转换16进制字符串
* @param bytes
* @return
*/
public static String bytesToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}
/***
* 16进制字符串转换二进制
* @param hexStr
* @return
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length() / 2];
for (int i = 0; i < hexStr.length() / 2; i++) {
int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
}