使用网络流的数据传输问题

本文关键字:数据传输 问题 网络 | 更新日期: 2023-09-27 17:54:23

我的代码有一个大问题。或者用系统。下面是c#中的客户端代码:

TcpClient client = new TcpClient("192.168.1.254", 19999);
NetworkStream nstream = client.GetStream();
Console.WriteLine("Connected.");
Stream stream = new FileStream("test.dat", FileMode.Create, FileAccess.Write);
int counter = 0;
byte[] buffer = new byte[1024];
while ((counter = nstream.Read(buffer, 0, 1024)) > 0)
{
    stream.Write(buffer, 0, counter);
}
stream.Close();
nstream.Close();
client.Close();
Console.WriteLine("Done here.");

这个应用程序与服务器一起工作,用python编写。这里没有什么火箭科学。客户端连接,服务器立即循环发送数据,直到套接字关闭。问题是,在我的机器上,这个应用程序总是在5 - 7 kB之后停止接收数据。它停止并挂起read方法(如调试器所示)。这只发生在我的机器上(Windows 7 x64 from MSDN, visual studio 2013 express, .net 4.5.1)。在我的机器上测试了这个应用程序,但在Linux上,用mono和其他一些Windows机器上。到处都行得通,可惜这里不行。我想这可能是我的系统有问题,所以下面是我到目前为止尝试的:

  • 不带调试器的应用程序

  • 重新安装visual studio

  • 重新安装。net framework

  • 关闭windows防火墙和AV

  • 将目标框架更改为先前版本(3,3.5)

不幸的是,无法重新安装操作系统。我必须让它在我的系统上工作,但我已经没有选择了。我甚至不知道是什么导致了这个问题。我还能查些什么?

使用网络流的数据传输问题

在没有可用字节的情况下调用NetworkStream.Read方法时,将阻塞,直到可用字节或关闭连接。因此,最好是1)设计一个协议,提前知道将要读取多少字节,然后在读取到那么多字节时停止读取,或者2)在不活动超时后关闭连接。请注意,1)是正确编写此代码的唯一方法,2)如果发生网络中断,将提供部分数据。