我有一个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机器获取连续数据的可靠性也是如此。在我的测试中,这些代码会在一段时间后自动退出响应或获取数据。
请帮我获取不间断的数据。
谢谢..
答案 0 :(得分:2)
在你写完东西后,你会立即处理NetworkStream
。这会关闭套接字。不要这样做。而是将TcpClient
放在using
语句中。
您阅读数据的方式是完全正确的。当Read
返回0
时,循环将退出,这表示远程端正常关闭了连接。如果这是意外的,则问题在于远程端。
仅捕获SocketException
并检查状态代码属性以找出确切的错误。
无法可靠地检测网络错误。您必须等待异常才能注意到连接失败。之后,您需要定期尝试再次建立连接,以找出网络何时可用。
我认为Windows提供了一些网络接口级事件来检测拔出的有线电缆,但这些事件是不可靠的。