Java套接字在开始接收客户端请求时会消耗100%的CPU



我有一个占用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();
}
}

按如下方式尝试:

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

最新更新