Go, Go, Godot!
  • 0

Creating a UDP peer-to-peer connection

November 16, 2023

Creating network connections with Godot is simple — as long as you have the other party’s IP address, and there’s no NAT gateway involved. Unfortunately, that’s exactly the problem in most cases. You don’t know the other party’s IP, and these days, just about everyone is behind a combination wifi router/gateway/firewall with NAT.

Conceptually, NAT hole-punching is pretty simple, and this video explains how it’s done with just netcat.

In a nutshell:

  • listen on a particular port (e.g. 50001)
  • nc -u -l 50001
  • echo ‘hello’ | nc -u ipaddr 50001
  • echo ‘hole punch’ | nc -u -p 50001 ipaddr 50002
  • third party exchanges ip addresses

Putting it all together, player A (hosting a game) would require the game to connect to the directory server.

  • The directory server would list the game as something a player can now connect to.
  • player B (client who wants to join) will tell the directory service that it wants to connect, and will send its info
  • The directory server forwards the information to player A (host), player A will then send a packet to player B, and respond to the directory server
  • The directory server will then tell player B to go ahead and connect to player A.
  • Player B should be able to punch through to player A

With Godot, the connections from client to host would use ENetMultiplayerPeer.create_client(), which can specify the local port.

Here’s an older example of a signaling server: https://github.com/Faless/gd-webrtc-signalling/tree/master

gdscriptgodotnetworking
Posted in Godot.
Share
Previousgodot-matcha: Free multiplayer without a server
NextSuper Godot Galaxy Concept

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Related Posts

  • February 15, 2024

    Inventory System v1.8 available

    The latest version includes a few new enhancements, and an experiment: The sequencer demo uses inventory instances to hold music notes, which can be played back. This was inspired by music trackers that were popular in the 90s, such as Scream Tracker and Impulse Tracker. The sequencer isn’t meant to be a production-ready digital audio …

  • April 21, 2024

    Inventory System v1.13 available

    It’s been a while, but it was worth the wait. The latest version of the Inventory System is now available, with a long list of features, improvements, fixes, and documentation. This time the focus is on multiplayer. Let’s cover the features first: Bug fixes:

  • March 11, 2025

    Update all resources after modifying a resource class

    Godot’s resources are quite powerful. However, modifying a resource class doesn’t automatically update any corresponding .tres files, unless you happen to edit a scene that uses that resource in some way. This doesn’t impact runtime behavior — the game still runs as expected. But it can impact version control and result in a messier diff …

  • February 18, 2024

    Inventory System v1.9 available

    Another quick inventory system update. The Resizable Container Demo now includes preliminary support for controllers. Features: Additional bug fixes:

    © 2026 GoGoGodot.io. All rights reserved.