0

我有一个消耗 100% CPU 的套接字,单个客户端总是将数据发送到服务器大约 4096 字节,在服务器端我想获取客户端数据并转换为实际形式并存储到数据库中。客户端每 3 秒发送一次数据。我做了以下代码来获取客户请求。

    ServerSocket waiting = new ServerSocket(18800, 50, InetAddress.getByName("192.20.50.102"));
    while(true) {
       Socket socket = waiting.accept(); 
       new SessionHandler(socket).start();
    }

用 C 编写的客户端代码,因此数据类型与 Java 不同,因为我需要将接收到的字节转换为实际形式并插入数据库。线程类代码如下:

public class SessionHandler extends Thread {

private Socket socket;

public SessionHandler(Socket socket) {
    this.socket = socket;
}

public void run() {
    DataInputStream dataInputStream;
    try {
        dataInputStream = new DataInputStream(socket.getInputStream());
        int tcCode = dataInputStream.readInt();
        int length = dataInputStream.readInt();
        if (tcCode == 1001) {
            System.out.println("in 1001");
            byte[] messageByte = new byte[length];
            int totalBytesRead = 0;
            while (totalBytesRead < length) {
                int currentBytesRead = dataInputStream.read(messageByte, totalBytesRead, length - totalBytesRead);
                totalBytesRead = currentBytesRead + totalBytesRead;
            }
            ByteBuffer buffer = ByteBuffer.wrap(messageByte);
            ShortBuffer shortBuffer = buffer.asShortBuffer();
            short[] values = new short[length / 2];
            shortBuffer.get(values);
            TCCodeOneOOOne tcCodeOneOOOne = new TCCodeOneOOOne(values);
            tcCodeOneOOOne.main(null);
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
4

1 回答 1

0

尝试如下:

ServerSocket waiting = new ServerSocket(18800, 50, InetAddress.getByName("192.20.50.102"));
Socket socket = waiting.accept(); 
new SessionHandler(socket).start();
于 2019-11-05T13:02:00.587 回答