【发布时间】:2011-12-23 01:58:14
【问题描述】:
我写了一个简单的 TCP 客户端和服务器。问题出在客户身上。
我在读取来自服务器的整个响应时遇到了一些问题。我必须让线程休眠以允许发送所有数据。
我尝试了几次将这段代码转换成一个循环,直到服务器完成发送数据。
// Init & connect to client
TcpClient client = new TcpClient();
Console.WriteLine("Connecting.....");
client.Connect("192.168.1.160", 9988);
// Stream string to server
input += "\n";
Stream stm = client.GetStream();
ASCIIEncoding asen = new ASCIIEncoding();
byte[] ba = asen.GetBytes(input);
stm.Write(ba, 0, ba.Length);
// Read response from server.
byte[] buffer = new byte[1024];
System.Threading.Thread.Sleep(1000); // Huh, why do I need to wait?
int bytesRead = stm.Read(buffer, 0, buffer.Length);
response = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Response String: "+response);
client.Close();
【问题讨论】:
-
客户端需要某种方式来确定服务器何时完成(例如,特殊终止序列的长度前缀)
-
尝试使用 StreamReader msdn.microsoft.com/en-us/library/system.io.streamreader.aspx
-
StreamReader 将如何提供帮助?也不知道服务器什么时候结束。