我有2个简单的应用程序 - 服务器和客户端。目前,服务器只是等待客户端连接,打印networkstream.DataAvailable状态,冻结5秒并再次打印networkstream.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中有数据。但是没有任何数据!这是一个问题,因为在我的应用程序中,我使用networkstream.DataAvailable来检测是否有任何数据从服务器发送。 所以,问题是 - 我做错了什么?如何正确检查数据的可用性?
答案 0 :(得分:1)
Thomas Levesque在评论部分回答了我的问题:
从服务器的角度来看,没有什么可读的,因为客户端没有写任何东西。我认为StreamWriter在创建BOM时会写入BOM,因此需要3个字节。并且sr.Read()尝试读取一个字符,但除了BOM之外没有什么可读的,因此它会阻塞。 - Thomas Levesque 10分钟前