0

我正在尝试为简单的客户端/服务器连接创建一个类。此类内部是一个服务器端客户端,但它不会接收写入服务器 NetworkStream 的内容。如果您想知道,我打算让所有数据在发送到客户端之前通过服务器程序,所以我需要一些东西来处理 NetworkStream(因此是服务器端客户端)上的所有数据。这是我的课:

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());。我不明白为什么它不会从流中接收消息。请帮忙?

4

1 回答 1

2

您的直接问题是您正在尝试使用相同的流进行读取和写入。NetStream是输入流——来自客户端的数据。如果要写入套接字,则需要从套接字创建一个流。

正如它所写的那样,您正在写入客户端流。您需要写入服务器流。

我不明白的是为什么您在TcpClient客户端使用,而在创建TcpListener. 你最好使用AcceptTcpClient。然后您可以写入该客户端的流并从另一个流中读取。

NetworkStream要从套接字创建一个,请使用构造函数。不过,我强烈建议您改用它AcceptTcpClient

于 2013-06-13T18:33:24.407 回答