背景:我的應用程序可以選擇自動檢查網絡上的設備是否連接到網絡。TCP客戶端和套接字問題
如果設備未連接,則表示爲藍色正方形,並且表示連接的綠色正方形。我已經對這個程序進行了比較徹底的測試,並且有幾組不同的數據需要查看;
如果設備開始斷開連接,我可以連接,然後斷開,從藍色,綠色,藍色,但在此之後停止運作。
如果設備開始連接,我可以斷開連接,但不能再次連接,所以這會從綠色變爲藍色,但隨後停止運行。
下面是一些代碼片段,顯示我如何連接到這些(這不是異步的,因爲一些設備沒有回調(?));
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,直到操作完成纔會退出。「