如何正确和完全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() – 所有连接?