Пытался реализовать "многопоточность" в TCP, т.е. делая Listen и Accept в одном, а все дальнейшие действия в следующем скрипте.
От первого скрипта передавался во 2й скрипт сокет (полученный TCPAccept), через параметры. Далее 2й скрипт пытался получить отправляемые клиентом пакеты TCPRecv (ставил ограничение в 10 секунд на TCPRecv, при достижении которого клиенту возвращалось сообщение с ошибкой), но проблема в том, что данные просто не доходили ни в одну ни в другую сторону.
Вот примеры скриптов
Сервер 1 (Listen + Accept)
Сервер 2 (Recv)
Клиент
В чем может быть проблема?
От первого скрипта передавался во 2й скрипт сокет (полученный TCPAccept), через параметры. Далее 2й скрипт пытался получить отправляемые клиентом пакеты TCPRecv (ставил ограничение в 10 секунд на TCPRecv, при достижении которого клиенту возвращалось сообщение с ошибкой), но проблема в том, что данные просто не доходили ни в одну ни в другую сторону.
Вот примеры скриптов
Сервер 1 (Listen + Accept)
Код:
#pragma compile(AutoItExecuteAllowed, true)
TCPStartup()
$listen = TCPListen ("127.0.0.1", 65432)
Do
$socket = TCPAccept($listen)
If @error Then
MsgBox(0, "TCPAccept", @error)
Exit
EndIf
Until $socket <> -1
Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & @ScriptDir & '\testreceiver.exe' & '" ' & _
$socket, '')
Сервер 2 (Recv)
Код:
#pragma compile(AutoItExecuteAllowed, true)
;TCPStartup() - пытался еще раз запускать TCP службы, но как я понимаю это не нужно и не помогло
If Not $CmdLine[0] Then
Exit
EndIf
$socket = $CmdLine[1]
$str = ''
Do
$str = TCPRecv ($socket, 10000)
Until $str <> ''
MsgBox (0, 0, $str)
Клиент
Код:
$ipadress = "127.0.0.1"
$port = 65432
$socket = 0
TCPStartup()
OnAutoItExitRegister("OnAutoItExit")
$socket = TCPConnect ($ipadress, $port)
TCPSend ($socket, 'Тестовое сообщение')
$str = ''
Do
$str = TCPRecv ($socket, 1000000)
ToolTip ($str)
Sleep (1000)
Until $str <> ''
MsgBox (0, 0, $str)
TCPCloseSocket ($socket)
Func OnAutoItExit()
TCPShutdown()
EndFunc
В чем может быть проблема?