Что нового

[Сеть, интернет] Двусторонняя передача по TCP

Max98

Новичок
Сообщения
45
Репутация
3
Добрый день. Пожалуйста, помогите решить такую проблему:
Пытаюсь передать по TCP данные от клиента к серверу с двусторонней передачей (и клиент и сервер читают и передают данные). Но как я ни пытался, ничего не получилось. :(
Пробовал так:

Клиент:
Код:
; Переменные
Global $sServerIP = "127.0.0.1", $sPort = 33891

TCPStartup()

; Открываем сокеты
$hSocket = TCPConnect($sServerIP, $sPort)

If @error Then
	MsgBox(16, "Ошибка", "Ошибка создания сокета")
	Exit
EndIf

; Отправляем данные
$iSend = TCPSend($hSocket, "Client Data")

If StringLen("Client Data") <> $iSend Then
	MsgBox(16, "Ошибка", "Ошибка отправки данных")
	Exit
EndIf

$sRecv = TCPRecv($hSocket, 1024)

MsgBox(64, "Клиент", $sRecv)

TCPCloseSocket($hSocket)
TCPShutdown()

Сервер:
Код:
; Переменные
Global $sServerIP = "127.0.0.1", $sPort = 33891

TCPStartup()

; Открываем сокеты
$hMainSocket = TCPListen($sServerIP, $sPort)

If $hMainSocket = -1 Then
	MsgBox(16, "Ошибка", "Ошибка создания сокета")
	Exit
EndIf

While True
	$hSocket = TCPAccept($hMainSocket)
	If $hSocket <> -1 Then ExitLoop
	TCPCloseSocket($hSocket)
WEnd

$sRecv = TCPRecv($hSocket, 1000000)

MsgBox(64, "Сервер", $sRecv)

$iSend = TCPSend($hSocket, "Server Data")

If StringLen("Server Data") <> $iSend Then
	MsgBox(16, "Ошибка", "Ошибка отправки данных")
	Exit
EndIf

TCPCloseSocket($hSocket)
TCPCloseSocket($hMainSocket)
 

Fever

Скриптер
Сообщения
308
Репутация
112
проблема в том, что программы находятся на разных стадиях выполнения и TCPRecv просто ничего не возвращает, делайте так:
Код:
Do
	$sRecv = TCPRecv($hSocket, 1000000)
Until $sRecv <> ""
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
хм... а не лучше ли использовать разные порты на прием и на передачу? и слушать их одновременно? это будет надежнее, по моему мнению
 
Автор
M

Max98

Новичок
Сообщения
45
Репутация
3
Огромное спасибо :laugh:. Fever, вы помогли мне с решением проблемы, большое спасибо. :IL_AutoIt_1:
 
Верх