JAVAのTCPによる受信バイトパケットに問題があります。 私のTCPServerクラスは、207バイトのパケットを送信します。 1つのパケットを送信すると、「207バイトのパケットを読む」というコンソールにプログラムが表示されます。停止します。次のパケットでは、実行を続け、 "Multiple Measurement"と表示し、 "1868767867バイトのパケットを読み込みます。"その後、受信は永遠に停止されます。私は1868767867バイトを受け取る理由を知らない。 wiresharkで確認して、サーバーは常に207バイトを送信します。TCPによるバイトパケットの受信
これは私れるtcpClientクラスです:
public class TCPClient extends Thread {
private ServerSocket serverSocket;
private Socket connectionSocket;
private InputStream inputStream;
private DataInputStream dataInputStream;
public TCPClient() throws IOException {
try {
serverSocket = new ServerSocket(Config.TCP_PORT);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
connectionSocket = serverSocket.accept();
inputStream = connectionSocket.getInputStream();
dataInputStream = new DataInputStream(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
while(true) {
try {
JsonObject json = getJsonFromTcp();
if (json != null) {
String command = json.getAsJsonPrimitive("command").getAsString();
if(command.equals("multipleMeasurement")) {
executeMultipleMeasurement();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private JsonObject getJsonFromTcp() throws IOException {
byte[] buff = new byte[4];
for(int i = 0; i < 4; i++) {
buff[i] = dataInputStream.readByte();
}
int len = (((buff[3] & 0xff) << 24) | ((buff[2] & 0xff) << 16) | ((buff[1] & 0xff) << 8) | (buff[0] & 0xff));
if(len > 0) {
System.out.println("Read " + len + " byte packet.");
byte[] data = new byte[len];
dataInputStream.readFully(data);
String jsonString = new String(data, "UTF-8");
JsonParser jsonParser = new JsonParser();
JsonObject json = jsonParser.parse(jsonString).getAsJsonObject();
return json;
}
return null;
}
private void executeMultipleMeasurement() {
System.out.println("Multiple Measurement");
}
}
誰もが解決策を知っていますか?
最初の解決策は正しいです。どうもありがとう! – crulalbani