Что нового

[Сеть, Интернет] Открытие UDP соединения на указ. порту для приема/передачи

firex

AutoIT Гуру
Сообщения
943
Репутация
203
Всем доброго времени суток!
Возникла непосильная для меня задача, сколько не искал на форуме - толковых примеров нет.

Что у нас есть:
Допустим клиент и сервер стоят у меня на компьютере (127.0.0.1).
Сервер принимает данные на порту 12345.
Клиент отправляет данные на порт сервера с порта 12346(и принимает на 12346).

Проще говоря:
[client]:12346 => [server]:12345
[server]:12345 => [client]:12346

Необходимо отправить с порта 12346 на порт 12345 данные, далее получить ответ на порте, с которого отправляли данные(12346) с порта 12345.

Сколько не старался, ответ выходит либо пустой, либо вообще не то(видимо читает порт на котором висит сервер).
Сверял через Wireshack.

Сам пример(их были сотни, но этот возвращает(правда не то)):
Код:
UDPStartup()
   $sock = UDPOpen($IP, $PORT)
   UDPSend($sock, "отправляемый пакет")
   $data = UDPRecv($sock, 1024) ;Получаем данные с сервера.


P.S. Каков лимит приема символов у функции UDPRecv?

Заранее спасибо.
 

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
332
Не, ты перепутал.
Это работают две программы.
Одна всё время слушает указанный порт
Код:
UDPStartup()

OnAutoItExitRegister("Cleanup")  ; это нужно для закрытия порта при выходе

Local $socket = UDPBind("127.0.0.1", 12345)  ; слушать сокет 12345
If @error <> 0 Then Exit

While 1
    Local $data = UDPRecv($socket, 50)
    If $data <> "" Then
        MsgBox(4096, "UDP DATA", $data, 1)
    EndIf
    Sleep(100)
WEnd

Func Cleanup()
    UDPCloseSocket($socket)
    UDPShutdown()
EndFunc

Другая програма отправляет данные в тот порт, который слушает первая
Код:
Local $IP = "127.0.0.1"
$PORT = 12345

UDPStartup()
$sock = UDPOpen($IP, $PORT)
UDPSend($sock, "отправляемый пакет")
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
203
C2H5OH, Оказалось все куда эпичнее =\
Респонс оказался больше 1024 - поэтому доходил в виде "".
Все работало, а я ходил вокруг да около.

А на счет бинда порта - это лишнее оказалось.
Но все равно спасибо за пример.

P.S. Локалку все равно не слушает, ну и пусть :3
 

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
332
Почему локалку не слушает?
Я запускаю на одном компе эти два скрипта полностью символ в символ так как они приведены и получаю окно с сообщением.
подсказка: первый скрипт нужно откомпилировать и запустить как exe-шник.
 
Верх