NetworkStream.Read と NetworkStream.Write を使用して 88 バイトの生データ (文字列ではない) を送信するプログラムがあります。
バイト番号 58 の値はたまたま 10 (改行) です。このバイトが受信されると、受信プログラム インスタンス ストリームは読み取りを停止し、生データの読み取りではなく、ReadLine のように動作します。
シナリオは一貫しており、一度に 32 バイトを読み取るように変更すると、32 を読み取ってから 26 (合計 58) を読み取り、同じバイトで停止します。
これは、ポート 21 を使用してインターネット経由で接続された異なるマシンで 2 つのプログラム インスタンスを実行した場合です。同じマシンで両方のインスタンスを実行すると、88 バイト全体が問題なく受信されます。
Network Monitor を使用して 30 バイトがどこで失われるかを確認しますが、ここで提案を求めたり、誰かが同様の問題に直面したかどうかを尋ねたりすることにしました。
編集:コードは次のとおりです。
これがコードです。1 つのストリームからデータを読み取り、双方向で動作するもう 1 つのストリームに書き込みます。
class ProxyConnection
{
private NetworkStream clientStream;
private NetworkStream serverStream;
public ProxyConnection()
{
.. clientStream = tcpClient.GetStream();
serverStream = tcpServer.GetStream();
..}
private void RouteFromClientToServer()
{
Message message;
while (true)
{
try
{
message = ReadMessageFromClient();
ValidateMessage(message);
SendMessageToServer(message);
}
catch(IOException e)
{
Logger.getInstance().log(e.Message);
break;
}
}
}
private Message ReadMessageFromClient()
{
Message message = new Message();
message.bytes = new byte[MESSAGE_SIZE];
message.bytesCount = clientStream.Read(message.bytes, 0, MESSAGE_SIZE);
Logger.getInstance().log("Size ( " + message.bytesCount + " ) From Client");
return message;
}
private void SendMessageToServer(Message message)
{
serverStream.Write(message.bytes, 0, message.bytesCount);
Logger.getInstance().log("Size ( " + message.bytesCount + " ) To Server");
serverStream.Flush();
}
}