私のアプリで問題が発生しました。私はip = 192.168.0.3とport = 502のソケットから読み取りました。もう一つのプログラムは、そのポートフラグメントにメッセージを書き込みます(mac fragmnetの長さは205バイトです)。フラグメントごとにそのメッセージフラグメントを読む必要があります。しかし、私がこれを書いたとき、私はすべての断片を一つにまとめました。ソケット入力ストリームがフラグメント単位でフラグメントを読み取らない
boolean last=false;
int numberFragment=0;
while (((!last)) ) {
numberReceived = socketInputStream.read(buffer);
numberFragment++;
tempBuffer = new byte[numberReceived];
ByteBuffer baferce = ByteBuffer.wrap(tempBuffer);
baferce.put(buffer, 0, numberReceived);
//System.out.println("RECEIVED="+(new String(tempBuffer)));
last=ResponseFragmentCheck.IsLastFragment(tempBuffer, numberFragment);
System.out.println("LAST ="+last);
PrintBytesArray(tempBuffer);
received.add(tempBuffer);
}
断片化されたフラグメントを読み取る方法はありますか?
書き込みは、バッファの充填、タイマの満了、保留中のACKの受信を含む複雑な条件セットが成立するまで収集されます。また、flushing()では、送信されたのと同じ量でデータが受信されることはありません。これはバイトストリームです。 – EJP
ソケットにflush()を使用しているどの言語/ APIを使用していますか? – Andrew