你好,感谢您的帮助。 这次我想问一下TcpClient相关的问题。 我有一个服务器程序,正在编写一个客户端程序。 这个客户端使用TcpClient。它通过创建一个新的客户端来启动。
clientSocket=new TcpClient();
(顺便问一下,这会导致异常吗?以防万一我把它放在try-catch中,但我不确定是否真的需要) 无论如何,稍后我进入一个循环,在这个循环内我连接到服务器。
clientSocket.Connect("xx.xx.xx.xx",port);
然后我使用以下代码创建一个NetworkStream:
clientStream=clientSocket.GetStream();
然后通过Read开始等待从服务器获取数据。我知道这是阻塞的,因此我还设置了ReadTimeOut(例如1秒)。
到目前为止还不错。稍后,如果我没有从服务器收到任何内容,我会尝试向其发送一些内容。如果连续发生3次,我想要关闭连接并重新连接到服务器。
(注意,当服务器某种方式宕机时会出现完全不同的问题,因为这会在客户端中引起其他类型的错误-也许我以后会再问这个问题)
那么,我该怎么做呢?
if(clientSocket.Connected)
{
Console.WriteLine("Closing the socket");
clientSocket.Close();
}
我关闭了socket连接。 循环结束后,我会再次回到开头尝试连接服务器。
clientSocket.Connect("xx.xx.xx.xx",port);
然而,这会导致一个错误(实际上是未处理的异常)"无法访问已释放的对象"。
所以,我的问题是,如何关闭并重新连接到服务器? 再次感谢任何帮助。
try
/catch
块中。仅仅捕获异常是一种反模式。请参见 https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions/。 - Enigmativity