Что нового

Передача данных по TCP

u-Art

Новичок
Сообщения
2
Репутация
0
Приветсвую!

Возникла загвоздка при попытке организовать передачу текста в локальной сети по схеме:

Скрипт на сервере

Код:
#include <GUIConstants.au3>
;SERVER! Start Me First !
$g_IP = "192.168.1.4"

; Start The TCP Services
;==============================================
TCPStartUp()

; Create a Listening "SOCKET"
;==============================================
$MainSocket = TCPListen($g_IP, 65432,  2)
If $MainSocket = -1 Then Exit

While 1
$ConnectedSocket = TCPAccept( $MainSocket)
If $ConnectedSocket >= 0 Then
	$data = TCPRecv ( $MainSocket, 100)
   	MsgBox(0, "test data", $data)
	TCPShutdown ()
    Exit
EndIf
Wend


Скрипт на клиент-машине

Код:
$g_IP = "192.168.1.4"

; Start The TCP Services
;==============================================
TCPStartUp()

; Connect to a Listening "SOCKET"
;==============================================
$socket = TCPConnect( $g_IP, 65432 )
If $socket = -1 Then Exit

$data = "Test"
TCPSend ( $socket, $data )
TCPShutdown ()


При запуске скрипта на стороне клиента, на сервере выполняется условие If $ConnectedSocket >= 0 Then, но переменная данных пустая.
Пробовал менять условие $ConnectedSocket >= 0 на $data <> "", в этом случае скрипт не выходит из цикла.
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Попробуйте вместо
Код:
$data = TCPRecv ( $MainSocket, 100)

Код:
$data = TCPRecv ( $ConnectedSocket, 100)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Вот кошерная штука. Пользуйся ею.
 
Автор
U

u-Art

Новичок
Сообщения
2
Репутация
0
Благодарю dwerf
Код:
$data = TCPRecv ( $ConnectedSocket, 100)

Помогло, правда не сразу, пришлось интуитивно, методом тыка вставить паузу на стороне отправки (достаточно 1 таблэтки (с), тьфу 1 мс):
Код:
TCPSend ( $socket, $data )
Sleep (1)
TCPShutdown ()

иначе приходит пустая строка.
Отдельное спасибо, Belfigor, будет чем занять мозг на досуге.
 
Верх