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;
}
}