如何正确和完全closures/重置TcpClient连接?

什么是closures或重置TcpClient连接的正确方法? 我们有软件与硬件进行通信,但有时出现问题,我们不再与它沟通,直到我们重新启动软件。

我已经尝试强制TcpClient.Close(),甚至将其设置为null,但不起作用。 只有完整的软件重新启动。

build议?


我不能使用using关键字,因为TpcClient只在一个位置定义,但在整个库中使用。 (在任何时候只有一个连接)

这是一个处理沟通的图书馆。 软件本身可以调用Controller类(表示硬件)的ResetConnection()方法。

它目前看起来像

if (tcpClient != null) { tcpClient.Close(); tcpClient = null; } 

现在从我读的这里我应该使用tcpClient.Dispose()而不是“= null”

我会尝试一下,看看它是否有所作为。

在closures连接之前,您必须closuresstream:

 tcpClient.GetStream().Close(); tcpClient.Close(); 

closures客户端不会closuresstream。

使用word: using 。 编程的好习惯。

 using (TcpClient tcpClient = new TcpClient()) { //operations tcpClient.Close(); } 

鉴于接受的答案已经过时,而且我在其他答案中没有看到任何关于这个问题的答案,我正在创build一个新答案。 在.Net 2和更早版本中,您必须在closures连接之前手动closuresstream。 该错误在C#中的所有更高版本的TcpClient中都得到了修复,并且如Close方法的文档中所述,对Close方法的调用将Close连接和stream

closures套接字连接并允许重新使用套接字:

 tcpClient.Client.Disconnect(false); 

除了一些内部日志,closures==configuration。

处理调用tcpClient.Client.Shutdown(SocketShutdown.Both),但它吃任何错误。 也许如果你直接调用它,你可以得到一些有用的exception信息。

closures套接字以便重新打开的正确方法是:

 tcpClient.Client.Disconnect(true); 

布尔参数指示是否要重新使用套接字:

断开方法的使用

你有没有试过显式调用TcpClient.Dispose() ?

你确定你有TcpClient.Close()和TcpClient.Dispose() – 所有连接?