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...
UDPServer
Hérite de : RefCounted < Object
Une classe d'aide pour implémenter un serveur UDP.
Description
Un simple serveur qui ouvre un socket UDP et renvoie les PacketPeerUDP connectés lors de la réception de nouveaux paquets. Voir aussi PacketPeerUDP.connect_to_host().
Après avoir lancé le serveur (avec listen()), vous devez appeler poll() régulièrement (ex. à l'intérieur de Node._process()) pour qu'il traite les nouveaux paquets, les envoie aux PacketPeerUDP appropriés, ou reçoit de nouvelles connexions.
Voici une petit exemple sur la façon de l'utiliser :
# noeud_serveur.gd
class_name NoeudServeur
extends Node
var serveur = UDPServer.new()
var pairs = []
func _ready():
server.listen(4242)
func _process(delta):
serveur.poll() # Important !
if serveur.is_connection_available():
var pair = serveur.take_connection()
var paquet = pair.get_packet()
print("Pair accepté : %s:%s" % [pair.get_packet_ip(), pair.get_packet_port()])
print("Données reçues : %s" % [paquet.get_string_from_utf8()])
# Réponse pour qu'il sache que nous avons reçu le message
pair.put_packet(paquet)
# Gardons une référence afin que nous pussions contacter le pair distant.
pairs.append(pair)
for i in range(0, pairs.size()):
pass # Faire quelque chose avec les pairs connectés.
// NoeudServeur.cs
using Godot;
using System.Collections.Generic;
public partial class NoeudServeur : Node
{
private UdpServer _serveur = new UdpServer();
private List<PacketPeerUdp> _pairs = new List<PacketPeerUdp>();
public override void _Ready()
{
_serveur.Listen(4242);
}
public override void _Process(double delta)
{
_serveur.Poll(); // Important!
if (_serveur.IsConnectionAvailable())
{
PacketPeerUdp pair = _serveur.TakeConnection();
byte[] paquet = pair.GetPacket();
GD.Print($"Pair accepté : {pair.GetPacketIP()}:{paquet.GetPacketPort()}");
GD.Print($"Données reçues : {paquet.GetStringFromUtf8()}");
// Réponse pour qu'il sache que nous avons reçu le message
paquet.PutPacket(paquet);
// Gardons une référence afin que nous pussions contacter le pair distant.
_pairs.Add(pair);
}
foreach (var pair in _pairs)
{
// Faire quelque chose avec les pairs connectés.
}
}
}
# noeud_client.gd
class_name NoeudClient
extends Node
var udp = PacketPeerUDP.new()
var connecte = false
func _ready():
udp.connect_to_host("127.0.0.1", 4242)
func _process(delta):
if !connecte:
# Essayer de contacter le serveur
udp.put_packet("La réponse est ... 42 !".to_utf8_buffer())
if udp.get_available_packet_count() > 0:
print("Connecté : %s" % udp.get_packet().get_string_from_utf8())
connecte = true
// NoeudClient.cs
using Godot;
public partial class NoeudClient : Node
{
private PacketPeerUdp _udp = new PacketPeerUdp();
private bool _connecte = false;
public override void _Ready()
{
_udp.ConnectToHost("127.0.0.1", 4242);
}
public override void _Process(double delta)
{
if (!_connecte)
{
// Essayer de contacter le serveur
_udp.PutPacket("La réponse est ... 42 !".ToUtf8Buffer());
}
if (_udp.GetAvailablePacketCount() > 0)
{
GD.Print($"Connected: {_udp.GetPacket().GetStringFromUtf8()}");
_connecte = true;
}
}
}
Propriétés
|
Méthodes
get_local_port() const |
|
is_connection_available() const |
|
is_listening() const |
|
poll() |
|
void |
stop() |
Descriptions des propriétés
int max_pending_connections = 16 🔗
Define the maximum number of pending connections, during poll(), any new pending connection exceeding that value will be automatically dropped. Setting this value to 0 effectively prevents any new pending connection to be accepted (e.g. when all your players have connected).
Descriptions des méthodes
Returns the local port this server is listening to.
bool is_connection_available() const 🔗
Renvoie true si un paquet avec une nouvelle combinaison adresse / port a été reçu sur la socket.
Renvoie true si le socket est ouvert et écoute à un port.
Error listen(port: int, bind_address: String = "*") 🔗
Démarre le serveur en ouvrant un socket UDP écoutant le port donné. Vous pouvez en option spécifier une adresse bind_address pour écouter seulement les paquets envoyés à cette adresse. Voir aussi PacketPeerUDP.bind().
Call this method at regular intervals (e.g. inside Node._process()) to process new packets. Any packet from a known address/port pair will be delivered to the appropriate PacketPeerUDP, while any packet received from an unknown address/port pair will be added as a pending connection (see is_connection_available() and take_connection()). The maximum number of pending connections is defined via max_pending_connections.
void stop() 🔗
Arrête le serveur, fermant le socket UDP si ouvert. Fermera toutes les connexions PacketPeerUDP acceptées avec take_connection() (les pairs distantes ne seront pas notifiés).
PacketPeerUDP take_connection() 🔗
Returns the first pending connection (connected to the appropriate address/port). Will return null if no new connection is available. See also is_connection_available(), PacketPeerUDP.connect_to_host().