PacketPeerUDP
Наследует: PacketPeer < RefCounted < Object
Одноранговый UDP-пакет.
Описание
UDP-пакетный узел. Может использоваться для отправки и получения необработанных UDP-пакетов, а также Variant-ы.
Пример: Отправка пакета:
var peer = PacketPeerUDP.new()
# При желании вы можете выбрать локальный порт, используемый для отправки пакета.
peer.bind(4444)
peer.set_dest_address("1.1.1.1", 4433)
peer.put_packet("hello".to_utf8_buffer())
Пример: Прослушивание пакетов:
var peer
func _ready():
peer = PacketPeerUDP.new()
peer.bind(4433)
func _process(_delta):
if peer.get_available_packet_count() > 0:
var array_bytes = peer.get_packet()
var packet_string = array_bytes.get_string_from_ascii()
print("Received message: ", packet_string)
Примечание: При экспорте в Android убедитесь, что в настройках экспорта Android включено разрешение INTERNET перед экспортом проекта или использованием развертывания в один клик. В противном случае сетевое взаимодействие любого рода будет заблокировано Android.
Методы
bind(port: int, bind_address: String = "*", recv_buf_size: int = 65536) |
|
void |
close() |
connect_to_host(host: String, port: int) |
|
get_local_port() const |
|
get_packet_ip() const |
|
get_packet_port() const |
|
is_bound() const |
|
is_socket_connected() const |
|
join_multicast_group(multicast_address: String, interface_name: String) |
|
leave_multicast_group(multicast_address: String, interface_name: String) |
|
void |
set_broadcast_enabled(enabled: bool) |
set_dest_address(host: String, port: int) |
|
wait() |
Описания метода
Error bind(port: int, bind_address: String = "*", recv_buf_size: int = 65536) 🔗
Связывает этот PacketPeerUDP с указанным port и bind_address с размером буфера recv_buf_size, что позволяет ему принимать входящие пакеты.
Если bind_address установлен на "*" (по умолчанию), одноранговый узел будет привязан ко всем доступным адресам (как IPv4, так и IPv6).
Если bind_address установлен на "0.0.0.0" (для IPv4) или "::" (для IPv6), одноранговый узел будет привязан ко всем доступным адресам, соответствующим этому типу IP.
Если bind_address установлен на любой допустимый адрес (например, "192.168.1.101", "::1" и т. д.), одноранговый узел будет привязан только к интерфейсу с этим адресом (или потерпит неудачу, если интерфейс с указанным адресом не существует).
void close() 🔗
Закрывает базовый UDP-сокет PacketPeerUDP.
Error connect_to_host(host: String, port: int) 🔗
Вызов этого метода подключает этот одноранговый узел UDP к заданной паре host/port. UDP на самом деле не требует установления соединения, поэтому эта опция означает только то, что входящие пакеты с разных адресов автоматически отбрасываются, а исходящие пакеты всегда отправляются на подключенный адрес (будущие вызовы set_dest_address() не разрешены). Этот метод не отправляет никаких данных удаленному одноранговому узлу, для этого используйте PacketPeer.put_var() или PacketPeer.put_packet(), как обычно. См. также UDPServer.
Примечание: Подключение к удаленному одноранговому узлу не помогает защититься от вредоносных атак, таких как подмена IP-адреса и т. д. Подумайте об использовании метода шифрования, такого как TLS или DTLS, если вы чувствуете, что ваше приложение передает конфиденциальную информацию.
Возвращает локальный порт, к которому привязан данный одноранговый узел.
String get_packet_ip() const 🔗
Возвращает IP-адрес удаленного узла, отправившего последний пакет (который был получен с помощью PacketPeer.get_packet() или PacketPeer.get_var()).
Возвращает порт удаленного узла, отправившего последний пакет (который был получен с помощью PacketPeer.get_packet() или PacketPeer.get_var()).
Возвращает, привязан ли этот PacketPeerUDP к адресу и может ли он принимать пакеты.
bool is_socket_connected() const 🔗
Возвращает true, если сокет UDP открыт и подключен к удаленному адресу. См. connect_to_host().
Error join_multicast_group(multicast_address: String, interface_name: String) 🔗
Присоединяется к группе многоадресной рассылки, указанной multicast_address, используя интерфейс, идентифицированный interface_name.
Вы можете присоединиться к той же группе многоадресной рассылки с несколькими интерфейсами. Используйте IP.get_local_interfaces(), чтобы узнать, какие из них доступны.
Примечание: Для работы многоадресной рассылки некоторым устройствам Android может потребоваться разрешение CHANGE_WIFI_MULTICAST_STATE.
Error leave_multicast_group(multicast_address: String, interface_name: String) 🔗
Удаляет интерфейс, идентифицированный interface_name, из группы многоадресной рассылки, указанной multicast_address.
void set_broadcast_enabled(enabled: bool) 🔗
Включите или отключите отправку широковещательных пакетов (например, set_dest_address("255.255.255.255", 4343). Эта опция отключена по умолчанию.
Примечание: Для некоторых устройств Android может потребоваться разрешение CHANGE_WIFI_MULTICAST_STATE и включение этой опции для приема широковещательных пакетов.
Error set_dest_address(host: String, port: int) 🔗
Устанавливает адрес назначения и порт для отправки пакетов и переменных. Имя хоста будет разрешено с помощью DNS, если необходимо.
Примечание: set_broadcast_enabled() должен быть включен перед отправкой пакетов на широковещательный адрес (например, 255.255.255.255).
Ожидает прибытия пакета на привязанный адрес. См. bind().
Примечание: wait() не может быть прерван после вызова. Это можно обойти, разрешив другой стороне отправить определенный пакет «пилюли смерти», например:
socket = PacketPeerUDP.new()
# Server
socket.set_dest_address("127.0.0.1", 789)
socket.put_packet("Time to stop".to_ascii_buffer())
# Client
while socket.wait() == OK:
var data = socket.get_packet().get_string_from_ascii()
if data == "Time to stop":
return
var socket = new PacketPeerUdp();
// Server
socket.SetDestAddress("127.0.0.1", 789);
socket.PutPacket("Time to stop".ToAsciiBuffer());
// Client
while (socket.Wait() == OK)
{
string data = socket.GetPacket().GetStringFromASCII();
if (data == "Time to stop")
{
return;
}
}