私の質問はこの投稿に似ています。しかし、最後に 0 バイトではなく、パケット長を送信しません。 Java で TCP ストリームを読み込む最も効率的な方法
だから、どうやってそれをコード化するのだろうと思っています。
現時点では私はちょうど使用します
this.socketIn = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
String line = this.socketIn.readLine();
パケットをスパム送信している間にパケットが送信された場合、まだ到着していないパケットを完全に読み取られた行としてカウントしますが、それは不完全であり、プロトコル全体を台無しにします。
私のプロトコルでは、各パケットは 0 バイト (0x00) で終了し、パケットがマージ/スタックされた場合に単一のパケットの終了を決定します。
だから私が実際にやろうとしているのは、パケットが完全に作成され、処理の準備ができていることを示すために 0x00 に到達するまでソケット ストリームを読み続けることです。特定の時間枠で0バイトで終了していないため、パケットはジャンクです。たとえば、5秒です。
どうすればこれを行うことができますか?
PS>私はNIOフレームワークを使用していませんが、接続ソケットごとに通常のスレッドを使用しています。更新を処理し、特定の更新をランダムユーザーに送信する完全に異なるグローバルスレッドでデータを注入することは非常に難しいため、NIOに切り替えたくありません(放送されません)。
これが私がこれまでに試したことです。
String line = "";
int read;
long timeOut = System.currentTimeMillis();
while(true) {
read = this.socketIn.read();
if (read == -1 || read == 0 || (System.currentTimeMillis()-timeOut) > 5000)
break;
line += read
}