Я обнаружил, что socket.Connected сообщает только о состоянии, когда была выполнена последняя команда для соединения .Таким образом, в цикле Do Before serverStream.DataAvailable я использовал этот трюк, чтобы проверить, было ли закрыто соединение:
Dim test As Boolean = clientSocket.Client.Poll(10, System.Net.Sockets.SelectMode.SelectRead)
If test = True And serverStream.DataAvailable = False Then
'restart connection
End If
Так что теперь, наконец, получил контроль над происходящим и знаю, чтоиз-за клиентского соединения закрыто, что я не получил никаких данных.
Итак, я подумал, теперь, когда я знаю, что соединение закрыто, как мне это предотвратить?Это было проще, просто отправляйте данные на tcpip-сервер каждые 10 секунд, и он останется открытым.
Результат, который работает для меня (это не рабочий код, а просто пример решения):
Dim s As Date = Now
Do Until serverStream.DataAvailable
Dim r As Boolean = clientSocket.Client.Poll(10, System.Net.Sockets.SelectMode.SelectRead)
If DateDiff(DateInterval.Second, s, Now) > 10 Then
Dim dta(0) As Byte
dta(0) = 0
clientSocket.Client.Send(dta)
s = Now
End If
If r = True And serverStream.DataAvailable = False Then
'restart sub
Exit Sub
End If
loop
Так что теперь он даже не закрывается и должен перезапускаться каждые x минут.
Мои проблемы решены, и я счастливый кодер.;)