如何在网络拔出然后插入后立即重新连接TcpClient

时间:2014-10-01 05:51:46

标签: c# sockets tcp tcpclient

我有一个TcpClient,我想在网络断开然后重新连接时自动重新连接,但我没有得到如何实现它..

这是我的功能..

  private void Conn()
    {

            try
            {
                client = new TcpClient();

                client.Connect(new IPEndPoint(IPAddress.Parse(ip), intport));
                //Say thread to sleep for 1 secs.
                Thread.Sleep(1000);
            }
            catch (Exception ex)
            {
                // Log the error here.
                client.Close();
            }

            try
            {
                using (NetworkStream stream = client.GetStream())
                {
                    byte[] notify = Encoding.ASCII.GetBytes("Hello");
                    stream.Write(notify, 0, notify.Length);
                 }
                 byte[] data = new byte[1024];
                    while (true)
                    {
                        {
                            int numBytesRead = stream.Read(data, 0, data.Length);
                            if (numBytesRead > 0)
                            {
                                data= Encoding.ASCII.GetString(data, 0, numBytesRead);
                            }
                         }
                     }
               }
             catch{Exception ex}

while (true)从Tcpip机器获取连续数据的可靠性也是如此。在我的测试中,这些代码会在一段时间后自动退出响应或获取数据。 请帮我获取不间断的数据。 谢谢..

1 个答案:

答案 0 :(得分:2)

在你写完东西后,你会立即处理NetworkStream。这会关闭套接字。不要这样做。而是将TcpClient放在using语句中。

您阅读数据的方式是完全正确的。当Read返回0时,循环将退出,这表示远程端正常关闭了连接。如果这是意外的,则问题在于远程端。

仅捕获SocketException并检查状态代码属性以找出确切的错误。

无法可靠地检测网络错误。您必须等待异常才能注意到连接失败。之后,您需要定期尝试再次建立连接,以找出网络何时可用。

我认为Windows提供了一些网络接口级事件来检测拔出的有线电缆,但这些事件是不可靠的。