C#客户端/服务器:使用Streamreader/writer

C#客户端/服务器:使用Streamreader/writer,c#,sockets,tcp,streamreader,streamwriter,C#,Sockets,Tcp,Streamreader,Streamwriter,我对C#比较陌生,但这里有: 我正在用C#开发一个远程文件服务客户机/服务器控制台应用程序,它应该使用同步套接字交换消息 主要问题之一(尽管看起来很简单)是使用streamreader/streamwriter从服务器向客户端返回字符串 应用程序用户可以使用命令行界面,其中包含执行操作的选项(来自switch语句)。也就是说,键入1和enter将执行代码,将字符串从服务器发送到客户端 以下是来自客户端的示例代码: try { using (

我对C#比较陌生,但这里有:

我正在用C#开发一个远程文件服务客户机/服务器控制台应用程序,它应该使用同步套接字交换消息

主要问题之一(尽管看起来很简单)是使用streamreader/streamwriter从服务器向客户端返回字符串

应用程序用户可以使用命令行界面,其中包含执行操作的选项(来自switch语句)。也就是说,键入1和enter将执行代码,将字符串从服务器发送到客户端

以下是来自客户端的示例代码:

        try
        {
            using (TcpClient client = (TcpClient)clientObject)
            using (NetworkStream stream = client.GetStream())
            using (StreamReader rd = new StreamReader(stream))
            using (StreamWriter wr = new StreamWriter(stream))
            {

                string menuOption = rd.ReadLine();


                switch (menuOption)
                    {
                        case "1":
                        case "one":
                            string passToClient = "Test Message!";
                            wr.WriteLine(passToClient);
                            break;
                   } 
                      while (menuOption != "4");
               }
         }
我知道我发布的代码只是程序的一个片段,但它会占用相当多的空间,我希望你能从中收集我的意思,如果不是,我会发布更多

这只是给我一个大概的想法

我感谢你能提供的任何帮助/建议。我要找的不是太多的代码示例(虽然有点帮助),而是更多关于streamreader/writer的解释,因为我似乎不太了解在线内容


谢谢。

我想你只是少了一个
wr.flush()但本文应涵盖您需要的所有内容:


我刚刚使用您的代码运行了一个测试,它运行良好,我可以直接进入“一”案例语句

我猜您可能没有在发送的字符串中包含换行符,或者您只是配置了错误的TcpClient或TcpListener

以下是我的测试的客户端代码:

        TcpClient client = new TcpClient("127.0.0.1", 13579);
        string message = "one" + Environment.NewLine;
        Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
        NetworkStream stream = client.GetStream();
        stream.Write(data, 0, data.Length);
以下是服务器端:

        IPAddress localAddr = IPAddress.Parse("127.0.0.1");
        TcpListener server = new TcpListener(localAddr, 13579);
        server.Start();

        TcpClient client = server.AcceptTcpClient();
        using (client)
        using (NetworkStream stream = client.GetStream())
        using (StreamReader rd = new StreamReader(stream))
        using (StreamWriter wr = new StreamWriter(stream))
        {
            string menuOption = rd.ReadLine();
            switch (menuOption)
            {
                case "1":
                case "one":
                    string passToClient = "Test Message!";
                    wr.WriteLine(passToClient);
                    break;
            }
            while (menuOption != "4") ;
        }

只需首先运行服务器端代码,它将在等待连接时阻塞,然后在等待数据时阻塞。然后运行客户端代码。您应该能够在switch()上捕获断点。

每当您使用
StreamWriter
时,都需要记录流的内容。我将引用MSDN,原因很清楚:

清除当前写入程序的所有缓冲区,并将所有缓冲数据写入基础流

你可以简单地称之为:

wr.flush();

解决方案可以更简单:

StreamWriter wr = new StreamWriter(stream) { AutoFlush = true }
啊,我错过了Flush()