Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
PacketPeerUDP
Успадковує: PacketPeer < RefCounted < Object
Пакет UDP одномісний.
Опис
Одноранговий пакет UDP. Може використовуватися для надсилання й отримання необроблених UDP-пакетів, а також Variants.
Приклад: Надіслати пакет:
var peer = PacketPeerUDP.new()
# За бажанням ви можете вибрати локальний порт, який використовується для надсилання пакету.
peer.bind(4444)
peer.set_dest_address("1.1.1.1", 4433)
peer.put_packet("привіт".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("Отримано повідомлення: ", пакет_рядок)
Примітка. Під час експорту в Android переконайтеся, що ви ввімкнули дозвіл INTERNET у попередньому налаштуванні експорту Android перед експортом проекту або використанням розгортання одним клацанням миші. Інакше будь-який мережевий зв’язок буде заблокований 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 встановлюється до "*" (default), то він буде прив'язаний до всіх доступних адрес (both IPv4 і IPv6).
Якщо bind_address is set to "0.0.0.0" (для IPv4) або :" (для IPv6), односторонній зв'язок з усіма доступними адресами, що відповідають типу IP.
Якщо bind_address встановлюється на будь-яку дійсну адресу (наприклад, "192.168.1.101", ::1" і т.д.), одноліток буде прив'язаний до інтерфейсу з цією адресою (або не вдається, якщо не існує інтерфейсу з вказаною адресою).
void close() 🔗
Закриває PacketPeerUDP під'єм UDP.
Error connect_to_host(host: String, port: int) 🔗
Зателефонувавши цей метод з'єднує цей UDP однолітній до заданої host/port пара. UDP знаходиться в режимі реального підключення, тому цей варіант тільки означає, що вхідні пакети з різних адрес автоматично відхиляються, і що вихідні пакети завжди надсилаються на підключену адресу (податкові дзвінки до set_dest_address() не допускаються). Цей метод не надсилає ніяких даних на пульт дистанційного керування, щоб зробити це, використовувати PacketPeer.put_var() або PacketPeer.put_packet() як зазвичай. Дивитися також UDPServer.
Примітка: Підключення до пульта дистанційного з’єднання не допомагає захистити від шкідливих атак, таких як IP-покриття тощо. Якщо ви відчуваєте, що ваш додаток передається конфіденційною інформацією.
Повертає локальний порт, до якого зв'язується цей одноліток.
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) 🔗
Налаштовує адреса призначення та порт для відправки пакетів та змінних. У разі необхідності ввімкнено доменне ім’я.
Примітка: set_broadcast_enabled() повинен бути включений до відправки пакетів на адресу трансляції (наприклад, 255.255.255.255).
Очікує на прибуття пакета на прив'язану адресу. Див. bind().
Примітка: wait() не може бути перервано після його виклику. Це можна вирішити, дозволивши іншій стороні надіслати певний пакет «пігулки смерті» таким чином:
socket = PacketPeerUDP.new()
# Сервер
socket.set_dest_address("127.0.0.1", 789)
socket.put_packet("Time to stop".to_ascii_buffer())
# Клієнт
while socket.wait() == OK:
var data = socket.get_packet().get_string_from_ascii()
if data == "Time to stop":
return
var socket = new PacketPeerUdp();
// Сервер
socket.SetDestAddress("127.0.0.1", 789);
socket.PutPacket("Time to stop".ToAsciiBuffer());
// Клієнт
while (socket.Wait() == OK)
{
string data = socket.GetPacket().GetStringFromASCII();
if (data == "Time to stop")
{
return;
}
}