C#Server不会读取客户端发送的多行

时间:2017-02-20 15:07:40

标签: c# server client streamreader readline

我目前正在创建一个与服务器通信的客户端。到目前为止,任何通信都不会超过一行,所以我已经能够使用Streamreader readline来获取客户端输入。 但是,我现在拥有多行代码的命令,但是服务器只会读取第一行,因为我使用了readline()。 我尝试过readtoend(),但是当我这样做时,服务器和客户端之间的连接由于某种原因而失败。

以下是我客户端中的代码,该示例显示了一个由多行发送的命令:

  else if (args.Length == 1)
                {
                    sw.WriteLine("GET" + " /?name=" + args[0] + " HTTP/1.1");
                    sw.WriteLine("HOST: " + host);
                    sw.WriteLine("");
                    sw.Flush();
                }

这是我服务器中的代码,它在行中读取:

 string line = sr.ReadToEnd().Trim();
        Console.WriteLine("Respond Recieved " + line);
        String[] Sections = line.Split(new char[] { ' ' }, 2);

因此,为了帮助澄清问题,如果我将如上所示的命令发送到服务器,来自服务器的响应将是“Response Received:GET”+“/?name =”+ args [0] +“ HTTP / 1.1“而不是其他行。

非常感谢任何帮助!

谢谢

3 个答案:

答案 0 :(得分:1)

ReadToEnd()可能无限期地阻塞非关闭流,如NetworkStream。我猜你得到的错误是超时或类似的东西?

阅读标题的最简单方法是多次调用ReadLine()。如果它返回null,表示流结束(客户端断开连接,可能是错误条件,除非指定了Connection:Closed并且您已读取空行)。空行表示您已到达标题的末尾。之后是可选的请求主体,它将由可选的Content-Length标头指定。

请记住StreamReader缓冲数据!如果内容正文不是ASCII文本,那么这很重要。

一般来说,我认为你不应该自己实施HTTP阅读,但这是一个有趣的学习经验,是一个重要的标准。

答案 1 :(得分:0)

您可以尝试我从此link获得的以下代码吗?

            using (StreamReader sr = new StreamReader(path)) 
            {
                while (sr.Peek() >= 0) 
                {
                    Console.WriteLine(sr.ReadLine());
                }
            }

答案 2 :(得分:0)

您可以阅读所有数据

 using (StreamReader sr = new StreamReader(filePath))
  {
    string line;
       while ((line = sr.ReadLine()) != null)
        {
            Console.WriteLine(line);
            //Or do your work here.
        }
  }