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

时间:2014-03-27 00:09:20

标签: c# sockets tcp streamreader streamwriter

我对C#比较新,但是这里有:

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

其中一个主要问题(甚至认为看起来很简单)是使用streamreader / streamwriter从服务器返回一个字符串。

应用程序用户使用带有选项(来自switch语句)的命令行界面来执行操作。即输入1并输入将执行代码以将字符串从服务器发送到客户端。

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

        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的解释,因为我似乎无法理解在线的内容。

感谢。

4 个答案:

答案 0 :(得分:3)

我认为您错过了wr.flush();,但本文应涵盖您需要的所有内容:

http://thuruinhttp.wordpress.com/2012/01/07/simple-clientserver-in-c/

答案 1 :(得分:2)

每当您使用StreamWriter时,您需要Flush()流的内容。我引用MSDN的原因很清楚:

  

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

你可以简单地称之为:

wr.flush();

答案 2 :(得分:1)

解决方案可以更简单:

StreamWriter wr = new StreamWriter(stream) { AutoFlush = true }

答案 3 :(得分:0)

我刚刚使用您的代码运行测试,它运行正常,我可以直接进入“一个”案例陈述。

我猜你要么不在你发送的字符串中包含换行符,要么你只是将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()上捕获断点。