我在C#中有一个Client-Server程序 这是服务器的代码:
...
String dataFromClient = "";
NetworkStream networkStream;
TcpClient clientSocket;
bool transfer = true;
...
while (transfer)
{
networkStream = clientSocket.GetStream();
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
....
}
我想提出一个在客户端断开连接时停止循环的条件
我怎么能这样做?
非常感谢,
答案 0 :(得分:3)
确实无法直接检测到这一点。你只能尽量减少“伤害”。
为什么不可能?
因为TCP流不发送任何数据来检查连接是否仍然存在(这会导致不必要的开销,但效益不大)。您必须手动启动此类检查。一个简单的想法是定期ping以查看连接是否仍在工作。
我该如何处理?
在尝试读/写之前,请务必检查Connected属性。这只是一个简单的健全性检查,Connected状态总是过时的(这是由于上面解释的性质,无法改变这一点)。
在任何情况下,您仍然需要始终处理连接异常 - 无法保证传输成功,如果连接已经丢失,您只能尝试避免写入。
如果您注意到传输失败,则必须以某种方式处理它。您可以缓存数据并尝试重新连接,然后再次发送。或者您可以忽略失败的传输。这取决于您的具体要求。
答案 1 :(得分:0)
如果不尝试发送一些数据是不可能的。
在stackoverflow上有一个很好的讨论,但我现在似乎无法找到它...