StreamReader在NetworkStream上没有读取线
本文关键字:读取 NetworkStream StreamReader | 更新日期: 2023-09-27 18:18:11
我想让一个简单的客户端/服务器连接类。在这个类中是一个服务器端客户端,但它不会拾取写入服务器NetworkStream的内容。如果您想知道,我打算让所有数据在发送到客户端之前通过服务器程序,所以我需要一些东西来处理NetworkStream(因此服务器端客户端)上的所有数据。这是我的Class:
public class ConnectionServer
{
public readonly IPAddress ServerIP;
public readonly IPAddress LocalIP;
public readonly int Port;
private TcpListener ServerIn;
private Socket ServerSocket;
private TcpClient ServerSideClient;
private NetworkStream NetStream;
public StreamReader ServerInput;
public StreamWriter ServerOutput;
public ConnectionServer(int port)
{
try
{
Port = port;
ServerIP = IPAddress.Parse(NetHelper.GetPublicIP());
LocalIP = IPAddress.Parse(NetHelper.GetLocalIP());
ServerIn = new TcpListener(IPAddress.Any, Port);
ServerIn.Start();
Console.WriteLine("Server Started At: " + ServerIP.ToString() + ":" + Convert.ToString(Port));
ServerSideClient = new TcpClient("localhost", Port);
ServerSocket = ServerIn.AcceptSocket();
Console.WriteLine("Server-Side Client Socket Accepted.");
NetStream = ServerSideClient.GetStream();
ServerInput = new StreamReader(NetStream);
ServerOutput = new StreamWriter(NetStream);
ServerOutput.AutoFlush = true;
Console.WriteLine("All Streams Initialized.");
ServerOutput.WriteLine("Testing Server-Side Client.");
Console.WriteLine("Test Message Sent.");
Console.WriteLine(ServerInput.ReadLine());
}
finally
{
}
}
~ConnectionServer()
{
ServerInput.Dispose();
ServerSideClient.Close();
}
}
它没有在Console.WriteLine(ServerInput.ReadLine());
上写任何东西。我不明白为什么它收不到信息流上的信息。帮助吗?
您的直接问题是您试图使用同一流进行读写。NetStream
是输入流——来自客户端的数据。如果你想写到套接字,你需要从套接字创建一个流。
写入时,您正在写入客户端流。您需要写入服务器流。
我不明白的是为什么你在客户端使用TcpClient
,在创建TcpListener
后在服务器端使用原始套接字。您最好使用AcceptTcpClient。然后你可以写入客户端的流,并从另一个流中读取。
要从套接字创建NetworkStream
,使用构造函数。但是,我强烈建议您改用AcceptTcpClient
。