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