Table of Contents

Class UdpServer

Namespace
Godot
Assembly
GodotSharp.dll

A simple server that opens a UDP socket and returns connected PacketPeerUdp upon receiving new packets. See also ConnectToHost(string, int).

After starting the server (Listen(ushort, string)), you will need to Poll() it at regular intervals (e.g. inside _Process(double)) for it to process new packets, delivering them to the appropriate PacketPeerUdp, and taking new connections.

Below a small example of how it can be used:

// ServerNode.cs
  using Godot;
  using System.Collections.Generic;

public partial class ServerNode : Node { private UdpServer _server = new UdpServer(); private List<PacketPeerUdp> _peers = new List<PacketPeerUdp>();

  public override void _Ready()
  {
      _server.Listen(4242);
  }

  public override void _Process(double delta)
  {
      _server.Poll(); // Important!
      if (_server.IsConnectionAvailable())
      {
          PacketPeerUdp peer = _server.TakeConnection();
          byte[] packet = peer.GetPacket();
          GD.Print($"Accepted Peer: {peer.GetPacketIP()}:{peer.GetPacketPort()}");
          GD.Print($"Received Data: {packet.GetStringFromUtf8()}");
          // Reply so it knows we received the message.
          peer.PutPacket(packet);
          // Keep a reference so we can keep contacting the remote peer.
          _peers.Add(peer);
      }
      foreach (var peer in _peers)
      {
          // Do something with the peers.
      }
  }

}

// ClientNode.cs
  using Godot;

public partial class ClientNode : Node { private PacketPeerUdp _udp = new PacketPeerUdp(); private bool _connected = false;

  public override void _Ready()
  {
      _udp.ConnectToHost("127.0.0.1", 4242);
  }

  public override void _Process(double delta)
  {
      if (!_connected)
      {
          // Try to contact server
          _udp.PutPacket("The Answer Is..42!".ToUtf8Buffer());
      }
      if (_udp.GetAvailablePacketCount() > 0)
      {
          GD.Print($"Connected: {_udp.GetPacket().GetStringFromUtf8()}");
          _connected = true;
      }
  }

}

[GodotClassName("UDPServer")]
public class UdpServer : RefCounted, IDisposable
Inheritance
UdpServer
Implements
Inherited Members

Constructors

UdpServer()

public UdpServer()

Properties

MaxPendingConnections

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).

public int MaxPendingConnections { get; set; }

Property Value

int

Methods

GetLocalPort()

Returns the local port this server is listening to.

public int GetLocalPort()

Returns

int

HasGodotClassMethod(in godot_string_name)

Check if the type contains a method with the given name. This method is used by Godot to check if a method exists before invoking it. Do not call or override this method.

protected override bool HasGodotClassMethod(in godot_string_name method)

Parameters

method godot_string_name

Name of the method to check for.

Returns

bool

HasGodotClassSignal(in godot_string_name)

Check if the type contains a signal with the given name. This method is used by Godot to check if a signal exists before raising it. Do not call or override this method.

protected override bool HasGodotClassSignal(in godot_string_name signal)

Parameters

signal godot_string_name

Name of the signal to check for.

Returns

bool

InvokeGodotClassMethod(in godot_string_name, NativeVariantPtrArgs, out godot_variant)

Invokes the method with the given name, using the given arguments. This method is used by Godot to invoke methods from the engine side. Do not call or override this method.

protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret)

Parameters

method godot_string_name

Name of the method to invoke.

args NativeVariantPtrArgs

Arguments to use with the invoked method.

ret godot_variant

Value returned by the invoked method.

Returns

bool

IsConnectionAvailable()

Returns true if a packet with a new address/port combination was received on the socket.

public bool IsConnectionAvailable()

Returns

bool

IsListening()

Returns true if the socket is open and listening on a port.

public bool IsListening()

Returns

bool

Listen(ushort, string)

Starts the server by opening a UDP socket listening on the given port. You can optionally specify a bindAddress to only listen for packets sent to that address. See also Bind(int, string, int).

public Error Listen(ushort port, string bindAddress = "*")

Parameters

port ushort
bindAddress string

Returns

Error

Poll()

Call this method at regular intervals (e.g. inside _Process(double)) to process new packets. And packet from known address/port pair will be delivered to the appropriate PacketPeerUdp, any packet received from an unknown address/port pair will be added as a pending connection (see IsConnectionAvailable(), TakeConnection()). The maximum number of pending connection is defined via MaxPendingConnections.

public Error Poll()

Returns

Error

Stop()

Stops the server, closing the UDP socket if open. Will close all connected PacketPeerUdp accepted via TakeConnection() (remote peers will not be notified).

public void Stop()

TakeConnection()

Returns the first pending connection (connected to the appropriate address/port). Will return null if no new connection is available. See also IsConnectionAvailable(), ConnectToHost(string, int).

public PacketPeerUdp TakeConnection()

Returns

PacketPeerUdp