【发布时间】:2017-01-17 00:52:43
【问题描述】:
您好,感谢您的帮助。 这次想问一下TcpClient。 我有一个服务器程序,我正在编写一个客户端程序。 此客户端使用 TcpClient。首先创建一个新客户端
clientSocket=new TcpClient();
(顺便说一句,这会导致异常吗?以防万一我把它放在 try-catch 中,但我不确定这是否真的有必要) 无论如何,稍后我进入一个循环,在这个循环中我连接到服务器
clientSocket.Connect("xx.xx.xx.xx",port);
然后我用
创建一个 NetworkStreamclientStream=clientSocket.GetStream();
然后开始通过Read等待来自服务器的数据。我知道这是阻塞的,所以我还设置了 ReadTimeOut(比如 1 秒)
无论如何,到目前为止一切都很好。 稍后,如果我没有从服务器收到任何东西,我会尝试向它发送一些东西。如果这种情况持续发生 3 次,我想关闭连接并再次重新连接到服务器
(请注意,一个完全不同的问题是当服务器以某种方式关闭时,会导致客户端出现其他类型的错误——也许我稍后会问这个问题)
那么,我该怎么办?
if(clientSocket.Connected)
{
Console.WriteLine("Closing the socket");
clientSocket.Close();
}
我关闭了套接字。 循环结束,所以我再次回到开头并尝试连接到服务器。
clientSocket.Connect("xx.xx.xx.xx",port);
但是这会导致错误(实际上是未处理的异常)“无法访问已处置的对象”
所以我的问题是 我怎样才能再次关闭并重新连接到服务器?
再次感谢您的帮助
【问题讨论】:
-
谢谢。我添加了一个标签。那样可以么? (顺便说一下,我如何在 cmets 中添加新行...如果我按 enter 只需添加评论。尝试 ctrl-enter, shift-enter ,不起作用...
-
是的,这很棒。谢谢!注释不支持段落或回车。它们始终是单个文本块。它们是 cmets,而不是段落。 :-) 很少(如果有的话)需要足够长的评论以需要多个段落。
-
只有在明确知道要捕获哪个异常并且可以有意义地处理它时,才应该将代码放在
try/catch块中。仅捕获异常是一种反模式。见blogs.msdn.microsoft.com/ericlippert/2008/09/10/…