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

  • January 30, 2024

    Inventory System v1.1 available

    Hot on the heels of 1.0, version 1.1 allows for gaps in the inventory. This release also correctly bakes the release version into the PDF Guide.

  • March 12, 2025

    Inventory System 2 Alpha 3 available

    This release improves weight management. Inventories can now configure an option weight limit, and item stacking and item transfer strategies are weight-aware. The crafting demo and crafting mechanic in the inventory tour have been improved. Auto-crafting is limited to the crafting slide, so that items don’t automatically and unexpectedly get crafted while stepping through the …

  • December 22, 2022

    A GDScript refactoring exercise

    Arguably, more fun than writing code is removing code. I was assembling a split-screen multiplayer UI. The goal behavior is to show/hide the appropriate displays for the players, depending on how many players there are. Initially, the code to update the UI was very simple, because I started with two players. In that case, you …

  • July 4, 2024

    Inventory System v1.14 available

    A new version of the Inventory System is available with more multiplayer-related features. The Multiplayer Interaction Demo can now run in multiple modes, through two separate implementations of the Character scene: The simple character scene leverages the MultiplayerSynchronizer and can either let the client have authority and move the character, or have the client send …

    © 2026 GoGoGodot.io. All rights reserved.