lightforever
Новичок
- Сообщения
- 37
- Репутация
- 2
Доброго времени суток. Изучаю работу TCP функций. Цель: передать простую строку от клиента к серверу.
Ниже код, который работат по локальной сети, но не получается создать соединение с сервером с внешнего ip адреса.
Код клиента:
Код сервера:
В коде сервера я пробовал задавать прослушиваемый адрес по-разному: с помощью @ipaddress1 и с помощью внешнего адреса, т.е. '85.xxx.xx.xx' - в первом случае всё получается, НО удаётся соединиться только с локальной сети, а в случае указания внешнего адреса функция TCPListen возвращает ошибку
Ниже код, который работат по локальной сети, но не получается создать соединение с сервером с внешнего ip адреса.
Код клиента:
Код:
TCPStartup();Инициировать использование службы TCP
$IP = '85.xxx.xx.xx';Указываем адрес к которому будем подключаться (Указываю внешний адрес)
$port = 400;Указываем порт к которому будем подключаться
$socket = TCPConnect($IP, $port);Указыываем ОС создать сокет, подключенный к указанному адресу
$dannie = InputBox('','','');Окно, которое принимает данные для отправки.
$rez = TCPSend($socket, $dannie);Отправляем данные на сервер
If @error <> 0 Then msgbox(0, "Ошибка", "Не удалось отправить данные на сервер")
TCPCloseSocket($socket);Закрываем сокетc
TCPShutdown();Завершить использование службы TCP
Код сервера:
Код:
TCPStartup();Инициировать использование службы TCP
$IP = @IPAddress1;Указываем адрес который будем прослушивать;
$port = 400;Указываем порт который будем прослушивать
While 1
$socket = TCPListen($IP, $port, 1);Создаем слушающий сокет, по указанному адресу
If @error Then ExitLoop;Если не удалось создать сокет, то выйти
$Connect = -1
Do
$Connect = TCPAccept($socket);Указыываем ОС создать сокет если появилось входящее подключение в прослушиваемом сокете
Until $Connect <> -1;Если клиент подключился, то выйти из цикла, если ошибка или никто не подключился, то продолжить цикл
While 1
$dannie = TCPRecv($Connect, 2048);Получаем максимум 2048 символов от клиента
If @error Then ExitLoop;Если не удалось получить символы, то выйти из цикла
If $dannie <> "" Then;Если данные получены, то...
MsgBox(0,'Get',$dannie)
ExitLoop
EndIf
Sleep(30)
WEnd
TCPCloseSocket($socket);Закрываем сокет
WEnd
TCPShutdown();Завершить использование службы TCP
В коде сервера я пробовал задавать прослушиваемый адрес по-разному: с помощью @ipaddress1 и с помощью внешнего адреса, т.е. '85.xxx.xx.xx' - в первом случае всё получается, НО удаётся соединиться только с локальной сети, а в случае указания внешнего адреса функция TCPListen возвращает ошибку