Опубликовано в

Плагин для работы с UDP сокетами. WLUdpSocketPlugin

Плагин предназначен для работы с UDP сокетами компьютера. И он позволяет:

  • Работать в режиме сервера. Открыть порт для перехвата всех входящих датаграммов (данные + данные об отправителе)
  • Работать в режиме клиента.
  • Передавать данные между ПК.
  • Передавать данные между программами в ПК используя “localhost”.

Плагин WLUdpSocketPlugin

Описание

После подключения плагина у нас появляется объект с указанным нами именем. Например у нас два сокета UDP1 UDP2.

Сокет Udp может работать в двух режимах:

  • Клиента. Общаться с одним сокетом.
  • Сервера. Обработка всех датаграммов.

При работе в режиме клиента нам нужно установить соединение с помощью функции connectToHost(“адрес”,порт).

После чего при поступлении данных от указанного адреса, у нас будет вызываться функция readDataUdpSocket(“имя объекта”). При этом способе все данные аккумулируются в одном буфере и могут быть считаны.

При работе в режиме сервера происходит обработка всех датаграммов(данные + данные отправителя). Будет вызываться функция readDatagramUdpSocket(“имя объекта”). При этом все датаграммы хранятся отдельно и последовательно считываются.

Пример:

У нас есть два сокета.

UDP1 – сервер, слушает порт 2026

UDP2 – клиент

Открываем прослушивание порта 2026 для UDP1. И соединяем UDP2 с UDP1.

function ON()

{ //добавляем 2 строки

  UDP1.bind(2026)

  UDP2.connectToHost("localhost",2026)

}

Отправка сообщения

function senMessage() //отправляем сообщение на сервер

{

DSTREAM.clear() //очищаем

DSTREAM.writeString("Happy New Year!") //добавляем строку

DSTREAM.writeInt16(2026) //добавляем число типа int 16 бит

SCRIPT.console("send Serial: "+ UDP2.sendData(DSTREAM.getData())) //отправляем в UDP1

}

Чтение сообщений UDP1.

function readDatagramUdpSocket(name) //обрабатываем данные на сервере

{

         console("readDatagramUdpSocket "+name)

         if(name == "UDP1")

         {

                   var datagram = UDP1.readDatagramObj();

                   DSTREAM.clear()

                   DSTREAM.setData(datagram.data); //устанавливаем данные в поток DSTREAM

                   SCRIPT.console("ip:"+datagram.ip+" port:"+datagram.port);

                   SCRIPT.console("from UDP: "+DSTREAM.readString()+" "+DSTREAM.readInt16())//читаем сначала строку, затем число. как и при отправке.

SCRIPT.console("send to"+UDP1.writeDatagram(DSTREAM.getData(),datagram.ip,datagram.port)) // отправляем ответ            

         }

}

function readDataUdpSocket(name) //обрабатываем данные от сервера

{      

         console("readDataUdpSocket "+name)   

         if(name==UDP2)

         {

                   UDP2.readAll()

         }

}

Вывод в консоль:

ip:127.0.0.1 port:58476 //пришёл датаграмм на сервер

from UDP: Happy New Year! 2026 //данные которые пришли

send to:true // отправляем ответ клиенту

readDataUdpSocket UDP2 //клиент, обработка ответа от сервера