Прошу вашей помощи разобраться со следующими кодами.
Первый код - открывает сокет, принимает входящие подключения и читает входящие данные. А так же в случае разрыва на сокете, в идеале должно закрыть предыдущий TCPAccept и создать новый. На деле новый создается, а старый не закрывается. Для анализа использую утилиту Port Explorer.
Второй код создает соединение на открытом сокете и передает информацию 02#ok. В случае обрыва, пересоздает подключение и продолжает дальше передавать информацию.
Должно быть так. На 10 компьютерах запущен второй скрипт, а на 11-м первый скрипт, идет прием входящих данных. Если этот 11й будет работать круглосуточно, а остальные машины будут перезагружаться и прочие разрывы, то на 11м будет открыто огромное количество сокетов.
Понимаю, что до цели я далек, но пока я запнулся на созданых открытых сокетах.
Пожалуйста, помогите разобраться.
Первый код - открывает сокет, принимает входящие подключения и читает входящие данные. А так же в случае разрыва на сокете, в идеале должно закрыть предыдущий TCPAccept и создать новый. На деле новый создается, а старый не закрывается. Для анализа использую утилиту Port Explorer.
Код:
$ip_server = @IPAddress1
$port = 65432
TCPStartup()
$MainSocket = TCPListen($ip_server, $port)
If $MainSocket = -1 Then
ToolTip('Ошибка чиения сокета', 0, 0)
TCPCloseSocket($MainSocket)
$MainSocket = TCPListen($ip_server, $port, 100)
Sleep(500)
EndIf
While 1
$ConnectedSocket = TCPAccept($MainSocket)
If $ConnectedSocket = -1 Then
ToolTip('Ошибка входящего подключения' & @LF & $ConnectedSocket, 0, 0)
TCPCloseSocket($ConnectedSocket)
Sleep(500)
EndIf
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
While 1
$recv = TCPRecv($ConnectedSocket, 48, 0)
If $recv = '' Then
ToolTip('Пусто :(' & @LF & $MainSocket & @LF & $ConnectedSocket & @LF & $recv, 0, 0)
Sleep(500)
ExitLoop
ElseIf $recv <> '' Then
ToolTip('Данные получены :)' & @LF & '$recv = ' & '>' & $recv & '<', 0, 0)
Sleep(500)
EndIf
ToolTip('')
WEnd
WEnd
TCPShutdown()
Второй код создает соединение на открытом сокете и передает информацию 02#ok. В случае обрыва, пересоздает подключение и продолжает дальше передавать информацию.
Код:
$ip_server = @IPAddress1
$port = 65432
;~ Запуск сетевой службы
TCPStartup()
$tcp = TCPConnect($ip_server, $port)
While 1
If $tcp = -1 Then
ToolTip('Ошибка соединения с сервером', 0, 80)
Sleep(1500)
TCPCloseSocket($tcp) ;В случае сбоя пересоздается подключение
Sleep(500)
$tcp = TCPConnect($ip_server, $port)
Else
$send = TCPSend($tcp, '02#ok') ;Отправка информации
If $send = 0 Then
ToolTip('Ошибка отправки информации на сервер', 0, 80)
TCPCloseSocket($tcp) ;В случае сбоя пересоздается подключение
Sleep(500)
$tcp = TCPConnect($ip_server, $port)
EndIf
Sleep(500)
EndIf
ToolTip('')
WEnd
;~ Завершение работы сетевой службы
TCPShutdown()
Должно быть так. На 10 компьютерах запущен второй скрипт, а на 11-м первый скрипт, идет прием входящих данных. Если этот 11й будет работать круглосуточно, а остальные машины будут перезагружаться и прочие разрывы, то на 11м будет открыто огромное количество сокетов.
Понимаю, что до цели я далек, но пока я запнулся на созданых открытых сокетах.
Пожалуйста, помогите разобраться.