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 に答える