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.

PacketPeerUDP

Eredita: PacketPeer < RefCounted < Object

Peer di pacchetto UDP.

Descrizione

Peer di un pacchetto UDP. Può essere utilizzato per inviare e ricevere pacchetti UDP grezzi e Variant.

Esempio: Invia un pacchetto:

var peer = PacketPeerUDP.new()

# Facoltativamente, è possibile selezionare la porta locale utilizzata per inviare il pacchetto.
peer.bind(4444)

peer.set_dest_address("1.1.1.1", 4433)
peer.put_packet("ciao".to_utf8_buffer())

Esempio: Ascolta per i pacchetti:

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("Messaggio ricevuto: ", packet_string)

Nota: Quando si esporta su Android, assicurarsi di abilitare l'autorizzazione INTERNET nella preimpostazione d'esportazione Android prima di esportare il progetto o di utilizzare la distribuzione con un clic. Altrimenti, qualsiasi tipo di comunicazione di rete sarà bloccata da Android.

Metodi

Error

bind(port: int, bind_address: String = "*", recv_buf_size: int = 65536)

void

close()

Error

connect_to_host(host: String, port: int)

int

get_local_port() const

String

get_packet_ip() const

int

get_packet_port() const

bool

is_bound() const

bool

is_socket_connected() const

Error

join_multicast_group(multicast_address: String, interface_name: String)

Error

leave_multicast_group(multicast_address: String, interface_name: String)

void

set_broadcast_enabled(enabled: bool)

Error

set_dest_address(host: String, port: int)

Error

wait()


Descrizioni dei metodi

Error bind(port: int, bind_address: String = "*", recv_buf_size: int = 65536) 🔗

Associa questo PacketPeerUDP alla porta port e all'indirizzo bind_address specificati con una dimensione del buffer recv_buf_size, consentendogli di ricevere i pacchetti in arrivo.

Se bind_address è impostato su "*" (predefinito), il peer sarà associato a tutti gli indirizzi disponibili (sia IPv4 sia IPv6).

Se bind_address è impostato su "0.0.0.0" (per IPv4) o "::" (per IPv6), il peer sarà associato a tutti gli indirizzi disponibili che corrispondono a quel tipo di IP.

Se bind_address è impostato su un indirizzo valido (ad esempio "192.168.1.101", "::1", ecc.), il peer sarà associato solo all'interfaccia con quell'indirizzo (o fallirà se nessuna interfaccia esiste con l'indirizzo specificato).


void close() 🔗

Chiude il socket UDP sottostante del PacketPeerUDP.


Error connect_to_host(host: String, port: int) 🔗

La chiamata a questo metodo collega questo peer UDP all'indirizzo host e porta port specificati. UDP è in realtà senza connessione, quindi questa opzione significa solo che i pacchetti in arrivo da indirizzi diversi sono automaticamente scartati e che i pacchetti in uscita sono sempre inviati all'indirizzo connesso (le chiamate future a set_dest_address() non sono consentite). Questo metodo non invia dati al peer remoto, per farlo, usa PacketPeer.put_var() o PacketPeer.put_packet() come al solito. Vedi anche UDPServer.

Nota: Connettersi al peer remoto non protegge da attacchi dannosi come IP spoofing, ecc. Considera di usare una tecnica di crittografia come TLS o DTLS se ritieni che la tua applicazione stia trasferendo informazioni sensibili.


int get_local_port() const 🔗

Restituisce la porta locale a cui questo peer è associato.


String get_packet_ip() const 🔗

Restituisce l'IP del peer remoto che ha inviato l'ultimo pacchetto (il quale è stato ricevuto con PacketPeer.get_packet() o PacketPeer.get_var()).


int get_packet_port() const 🔗

Restituisce la porta del peer remoto che ha inviato l'ultimo pacchetto (il quale è stato ricevuto con PacketPeer.get_packet() o PacketPeer.get_var()).


bool is_bound() const 🔗

Restituisce se questo PacketPeerUDP è associato a un indirizzo e può ricevere pacchetti.


bool is_socket_connected() const 🔗

Restituisce true se il socket UDP è aperto ed è stato connesso a un indirizzo remoto. Vedi connect_to_host().


Error join_multicast_group(multicast_address: String, interface_name: String) 🔗

Si unisce al gruppo multicast specificato da multicast_address attraverso l'interfaccia identificata da interface_name.

È possibile unirsi allo stesso gruppo multicast con più interfacce. Utilizza IP.get_local_interfaces() per sapere quali sono disponibili.

Nota: Alcuni dispositivi Android potrebbero richiedere l'autorizzazione CHANGE_WIFI_MULTICAST_STATE affinché il multicast funzioni.


Error leave_multicast_group(multicast_address: String, interface_name: String) 🔗

Rimuove l'interfaccia identificata da interface_name dal gruppo multicast specificato da multicast_address.


void set_broadcast_enabled(enabled: bool) 🔗

Abilita o disabilita l'invio di pacchetti in broadcast (ad esempio set_dest_address("255.255.255.255", 4343). Questa opzione è disabilitata per impostazione predefinita.

Nota: Alcuni dispositivi Android potrebbero richiedere l'autorizzazione CHANGE_WIFI_MULTICAST_STATE e che questa opzione sia abilitata anche per ricevere pacchetti in broadcast.


Error set_dest_address(host: String, port: int) 🔗

Imposta l'indirizzo e la porta di destinazione per l'invio di pacchetti e variabili. Un nome host sarà risolto tramite DNS, se necessario.

Nota: set_broadcast_enabled() deve essere abilitato prima di inviare pacchetti a un indirizzo broadcast (ad esempio 255.255.255.255).


Error wait() 🔗

Attende che un pacchetto arrivi all'indirizzo associato. Vedi bind().

Nota: Non è possibile interrompere wait() una volta che è stato chiamato. Ciò può essere aggirato permettendo all'altra parte di inviare uno specifico pacchetto "letale" come questo:

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