【发布时间】:2015-06-26 18:34:57
【问题描述】:
我正在尝试与服务器通信。
这是我的简单代码:
System.Net.Sockets.TcpClient sock = new System.Net.Sockets.TcpClient();
string outputString = string.Empty;
sock.Connect("stack.overflow", 80);
NetworkStream ns = null;
StreamReader sr = null;
StreamWriter sw = null;
ns = sock.GetStream();
sr = new StreamReader(ns);
sw = new StreamWriter(ns) { NewLine = "\r\n", AutoFlush = true };
ns.ReadTimeout = 10;
sw.WriteLine("send data to server");
sw.Flush();
outputString = sr.ReadLine();
while (!string.IsNullOrEmpty(outputString))
{
System.Diagnostics.Debug.WriteLine(outputString);
outputString = sr.ReadLine();
}
(我知道我的代码还有改进的空间。它让我的测试保持简单)
在 ReadLine() 旁边一切正常。 它没有做我期望它做的事情。
它从服务器读取所有行,并在最后一行之后无休止地等待新行。至少对我来说,它似乎在等待。
我以为它会在最后一行之后停止并返回 null 或其他内容。
谁能解释一下从服务器获取所有线路并继续前进的最佳做法是什么?
【问题讨论】:
-
因为
Socket.GetStream()提供的流无法知道服务器何时完成发送,StreamReader.ReadLine()永远无法知道它何时完成接收。 -
服务器在发送内容后必须发送一个空字符串(这个实现才能工作)
标签: c# sockets tcpclient streamreader readline