C# Streamreader.Readline未读取整行

C# Streamreader.Readline未读取整行,c#,networking,network-programming,C#,Networking,Network Programming,我正在编程一个网络服务器和一个客户机,以便通过端口43上的本地主机使用http 0.9相互连接,但是当我发送一个reguest,例如-h9(检测协议)hello(第一个参数)everbody(响应第一个参数的位置)时,它只接收代码的一小部分,而这部分代码只是“hello”部分“大家好”,因为它应该通过。 下面是我的客户代码 case "-h9":// http/0.9 protocol if (args.Length == 3)

我正在编程一个网络服务器和一个客户机,以便通过端口43上的本地主机使用http 0.9相互连接,但是当我发送一个reguest,例如-h9(检测协议)hello(第一个参数)everbody(响应第一个参数的位置)时,它只接收代码的一小部分,而这部分代码只是“hello”部分“大家好”,因为它应该通过。 下面是我的客户代码

case "-h9":// http/0.9 protocol
                                if (args.Length == 3)
                                {
                                    whatIsSent = "PUT /" + args[1] + "\r\n\r\n" + args[2] ;
                                    //sw.Write(whatIsSent);
                                    //sw.Flush();
                                    //not sending all of this on sending put /cssbct
                                }
                                else
                                {
                                    arguments = arguments.Remove(0, 4);
                                    whatIsSent = "GET /" + arguments;
                                    //sw.Write(whatIsSent);
                                }
                                break;
这是来自服务器的

 while (connection.Connected)
            {
                data = sr.ReadLine();//not reading all for PUT/
                #region http0.9
                if (data.Contains("GET /"))
                {
                    protocol = data.Substring(0, data.IndexOf(" "));
                    data = data.Substring(1 + (protocol.Length + 1));
                    switch (protocol)
                    {
                        case "GET"://wont work cause of PUT
                            if (data.Contains(" "))
                            {
                                firstArg = data.Substring(0, data.IndexOf(" "));
                                secondArg = data.Substring(data.IndexOf(" ") + 1, data.Length - firstArg.Length - 1);
                                useDictionary(firstArg, secondArg, ref returnData);
                            }
                            else
                            {
                                firstArg = data.Substring(0, data.Length);
                                secondArg = null;
                                useDictionary(firstArg, secondArg, ref returnData);
                                returnData = "HTTP/0.9 200 OK\r\nContent-Type: text/plain\r\n\r\n" + returnData;
                            }
                            break;

你发送的是PUT,但你只处理GET。我不知道你如何从这段代码中得出任何结论,不管是负面的还是其他的。问题不在于技术,而是可以编辑。这只是出于其他目的的草稿,问题在于sr.readline没有接受完整的流写。猜猜看:试着放一个断点t打开
if(data.Contains(“GET/”)
。点击它时,验证
data
是否只是“hello”(如果是“hello everybody”,那么问题不在于ReadLine)。接下来,我将把黄色指针移回1行,而不是继续执行;然后按F5执行返回断点。查看是否在第二次捕获“Everyone”(这可能表示您在缓冲区完全发送之前读取了缓冲区,或者在两个令牌之间发送了换行符)。如果是这样,您可能会更幸运地使用sr.ReadToEnd()。