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
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
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() |
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.
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()).
Restituisce la porta del peer remoto che ha inviato l'ultimo pacchetto (il quale è stato ricevuto con PacketPeer.get_packet() o PacketPeer.get_var()).
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).
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
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;
}
}