为啥不读取 NetworkStream 中的数据? .net TcpClient
Posted
技术标签:
【中文标题】为啥不读取 NetworkStream 中的数据? .net TcpClient【英文标题】:Why data from NetworkStream do not read? .net TcpClient为什么不读取 NetworkStream 中的数据? .net TcpClient 【发布时间】:2020-10-01 01:39:09 【问题描述】:我有客户端层和服务器层。客户端发送转换为字节数组整数变量。 我正在使用 TcpClient 和 TcpListener,并使用 NetworkStream 来写入和读取数据。出于某种原因,服务器不从 NetworkStream 读取数据,尽管我使用了这个问题的建议:How to get all data from NetworkStream
客户层:
TcpClient sender1 = new TcpClient();
sender1.Connect(ip, port);
using (NetworkStream stream1 = client.GetStream())
int isCorrect = 1;
byte[] data = BitConverter.GetBytes(isCorrect);
stream1.Write(data, 0, data.Length);
sender1.Close();
服务器层
TcpListener server = new TcpListener(IPAddress.Parse(ip), serverPort);
server.Start();
while (true)
TcpClient enterWaiter = server.AcceptTcpClient();
using (NetworkStream stream1 = enterWaiter.GetStream())
byte[] buffer = new byte[4];
using (MemoryStream ms = new MemoryStream())
int read;
while ((read = stream1.Read(buffer, 0, buffer.Length)) > 0)
ms.Write(buffer, 0, read);
Console.WriteLine($"ms.ToArray()");
server.Stop();
break;
【问题讨论】:
接受第一个客户端后,您读取数据。但可能还没有数据。所以你只需停止服务器。接受后尝试插入睡眠 【参考方案1】:这是因为您在接收数据之前关闭服务器,移动或移除Server.Stop并换行,例如:
TcpListener server = new TcpListener(IPAddress.Parse(ip), serverPort);
server.Start();
while (true)
TcpClient enterWaiter = server.AcceptTcpClient();
using (NetworkStream stream1 = enterWaiter.GetStream())
byte[] buffer = new byte[4];
using (MemoryStream ms = new MemoryStream())
int read;
while ((read = stream1.Read(buffer, 0, buffer.Length)) > 0)
ms.Write(buffer, 0, read);
Console.WriteLine($"ms.ToArray()");
//server.Stop(); <-- (Re)move
//break; <-- (Re)move
【讨论】:
以上是关于为啥不读取 NetworkStream 中的数据? .net TcpClient的主要内容,如果未能解决你的问题,请参考以下文章
读取ftp文件最后一行以后报错,无法访问已释放的对象。 对象名:System.Net.Sockets.NetworkStream