c# - TcpClient:如何关闭并重新连接它?

标签 c# tcpclient

您好,感谢您的帮助。 这次想问一下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();
            }

我关闭套接字。 循环结束,所以我再次回到开头并尝试连接到服务器。

clientSocket.Connect("xx.xx.xx.xx",port);

但是这会导致错误(实际上是未处理的异常)“无法访问已处置的对象”

所以我的问题是 我怎样才能关闭并重新连接到服务器??

再次感谢您的帮助

最佳答案

TcpClient 实例只能用于连接一次。您可以简单地实例化一个新的 TcpClient,而不是尝试重新打开一个关闭的客户端。

关于c# - TcpClient:如何关闭并重新连接它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39401952/

相关文章:

c# - `Could not load file or assembly ' Microsoft.Windows.Shell`, Prism - C#

c# - 为一个键反序列化具有多种数据类型的 JSON 文件

c# - v2 中的 Woocommerce REST API POST 不起作用

c# - 无法将 NULL 值插入自动增量主键列

c# - MYSQL "use"查询在应用程序中选择数据库

c# - 通过 TCP 发送大字符串 - Windows Phone

.net - 如何通过互联网建立套接字连接?

c# - TcpClient.Connect 说 "A connection attempt failed because the connected party..."

c# - 我应该怎么做才能完全关闭与mcu的tcpClient连接?

c# - 通过 TCP 接收数据 : MemoryStream contains more data than expected