背景:我的应用程序可以选择自动检查网络上的设备是否已连接到网络。
如果设备未连接,则表示为蓝色方块,绿色方块表示已连接。我已经对程序进行了相当彻底的测试,并且有几组不同的数据可供查看;
如果设备开始断开连接,我可以连接,然后断开连接,从蓝色变为绿色,再到蓝色,但在此之后停止运行。
如果设备开始连接,我可以断开连接,但不能再次连接,所以它从绿色变为蓝色,然后停止运行。
这里有一些代码片段来展示我是如何连接到这些的(这不是异步的,因为某些设备没有回调(?));
TcpClient _tc = new TcpClient();
if (!_tc.Client.Connected)
{
try
{
_tc.Client.Connect(device.deviceIPAddress, device.devicePort);
_tc.Client.ReceiveTimeout = 10;
}
catch
{
if (deviceDownNotified == false)
{
//do stuff to notify me
}
}
}
if (_tc.Client.Connected)
{
tcpSet = true;
try
{
result = this.SendCommandResult(bData, 72);
if (result[0] == 0xF0 && result[1] == 0xF0 && result[2] == 0x00 && result[3] == 0x02 && result[68] == 0xF0 && result[69] == 0xF0)
{
CheckChanges(result, device, exit);
deviceDownNotified = false;
}
}
catch
{
}
}
编辑:我也只是在想,有时我真的不需要手动断开连接。如果客户端未连接,则连接,如果已连接,则执行操作。我对它在状态之间切换一次并停止工作感到有点困惑。
我认为我的问题可能是由于如果设备断开连接我断开套接字/客户端的方式。有人有想法么?如果您需要更多信息,请询问。
编辑2:我连接了一个重新连接按钮,当它应该重新连接时我手动单击它,我收到以下错误异常:
“一旦套接字断开连接,您只能异步重新连接,并且只能连接到不同的端点。必须在操作完成之前不会退出的线程上调用 BeginConnect。”