我有一个程序使用 NetworkStream.Read 和 NetworkStream.Write 发送 88 字节的原始数据(不是字符串)。
字节数 58 恰好具有值 10(新行)。一旦接收到这个字节,接收程序实例流就会停止读取,就像 ReadLine 一样,而不是读取原始数据。
场景是一致的,当我将它更改为一次读取 32 个字节时,它读取 32 然后 26(总共 58 个)停止在同一个字节。
这是我在使用端口 21 通过 Internet 连接的不同机器上运行这两个程序实例时。当我在同一台机器上运行这两个实例时,接收到整个 88 字节没有问题。
我将使用网络监视器查看 30 字节丢失的位置,但我想在这里寻求建议或是否有人遇到类似问题。
编辑:这是代码:
这是代码。它从一个流中读取数据并将它们写入到另一个流中:`
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();
}
}