Что нового

Определить, не отвалился ли клиент с сокета?

46165957

Новичок
Сообщения
1
Репутация
0
Добрый день, господа.
В autoit я немного нуб. Накопипастил я такую вот простенькую штуку, делает то что мне нужно, без излишеств:
Код:
GUICreate("Incoming", 600, 300)
$loglist = GUICtrlCreateList("messages", -1, -1, 615, 227)
GUISetState()
Global $TCPAccept
TCPStartup()
$Socket = TCPListen("127.0.0.1", 4567)
GUICtrlSetData($loglist, ""  & $TCPAccept )

While 1
        $TCPRecv = TCPRecv($TCPAccept, 999999999)
        If @error Then _TCPAccept()
        If $TCPRecv <> "" Then CMD( $TCPRecv )
        Sleep(100)
WEnd

Func _TCPAccept()
        GUICtrlSetData($loglist, "")
        Do
           $TCPAccept = TCPAccept($Socket)
           GUICtrlSetData($loglist, ""  & $TCPAccept )
        Until $TCPAccept <> -1

EndFunc   ;==>_TCPAccept

Func CMD( $cmd )

   GUICtrlSetData($loglist, $cmd & " прилетело с " & $TCPAccept)
   ;снюхать ид с $cmd
   ;имитация хоткеев по айдишникам

EndFunc   ;==>CMD


И все бы хорошо. Работает. Но есть ньюанс, когда я гоняю тестовый скриптик с отправкой циферок, стянутый отсюда: http://autoit-script.ru/docs/functions/tcpsend.htm
отправил, отключил, после этого подключился снова и все продолжает работать. Но, если рвется сеть. Перезагружается машинка с которой идет инфа с тестового скрипта. Или устройство под андроидом, с которого запущена основная софтина (приложение на unity), которая гонит айдишки... то повторного подключения не происходит. Так понимаю, потому что $TCPAccept не сваливается в -1... а так как ни в сетях-сокетах, ни в autoit я не силён, и возникает вопрос. Как мне с "сервера" понять, что "клиент" внепланово отморозился?

Буду очень признателен. Спасибо!
Сообщение автоматически объединено:

Решил закостылил вопрос, толком не понимая что делаю, стянув этот скрипт - https://www.autoitscript.com/forum/topic/137221-fast-multi-client-tcp-server/
 
Последнее редактирование:
Верх