У меня есть сокет, который потребляет 100% ЦП, один клиент всегда отправляет данные на сервер около 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();
}
}