NetworkStream.即使服务器端没有数据,DataAvailable也是真的
本文关键字:DataAvailable 真的 数据 服务器端 NetworkStream | 更新日期: 2023-09-27 17:59:12
我有两个简单的应用程序-服务器和客户端。目前,服务器正在等待客户端连接,打印网络流。DataAvailable状态,冻结5秒并打印网络流。DataAvailable状态再次出现。客户端执行相同的操作,只是它不等待连接而是连接到服务器。服务器端代码:
static void Main(string[] args)
{
int port = 8880;
IPAddress localAddress = IPAddress.Parse("127.0.0.1");
TcpListener serverListener = new TcpListener(localAddress, port);
serverListener.Start();
TcpClient incomingConnection = serverListener.AcceptTcpClient();
IPEndPoint RemAddr = (IPEndPoint)incomingConnection.Client.RemoteEndPoint; ;
Console.WriteLine("Connection: {0}:{1}", RemAddr.Address, RemAddr.Port);
NetworkStream networkStream = incomingConnection.GetStream();
StreamWriter sw = new StreamWriter(networkStream, Encoding.UTF8) { AutoFlush = true };
Console.WriteLine("networkstream.DataAvailable is {0}", networkStream.DataAvailable);
Thread.Sleep(5000);
Console.WriteLine("networkstream.DataAvailable is {0}", networkStream.DataAvailable);
...
客户端代码:
static void Main(string[] args)
{
IPAddress remoteaddr = IPAddress.Parse("127.0.0.1");
int port = 8880;
TcpClient tcpclient = new TcpClient();
tcpclient.Connect(remoteaddr, port);
NetworkStream networkstream = tcpclient.GetStream();
StreamWriter sw = new StreamWriter(networkstream, Encoding.UTF8);
StreamReader sr = new StreamReader(networkstream, Encoding.UTF8);
Console.WriteLine("networkstream.DataAvailable is {0}", networkstream.DataAvailable);
Thread.Sleep(5000);
Console.WriteLine("networkstream.DataAvailable is {0}", networkstream.DataAvailable);
...
所以,我有一个问题。在服务器端,我有以下输出:
Connection: 127.0.0.1:55919
networkstream.DataAvailable is False
networkstream.DataAvailable is False
服务器端输出为:
networkstream.DataAvailable is False
networkstream.DataAvailable is True
所以客户端显示我的网络流中有数据。但是没有任何数据!这是一个问题,因为在我的应用程序中我使用networkstream。DataAvailable可检测是否有从服务器发送的数据。所以,问题是——我做错了什么?如何正确检查数据的可用性?
Thomas Levsque在评论部分回答了我的问题:
从服务器的角度来看,没有什么可读的,因为客户端没有写任何东西。我认为StreamWriter在创建BOM时会写入BOM,因此是3个字节。sr.Read()试图读取一个字符,但除了BOM之外没有什么可读取的,所以它会阻止。–Thomas Levsque 10分钟前