Internet Multiplayer Issues With August 2011 UDK Builds [Solved]


Quite a few people have noted that they are having multiplayer issues with recent UDK builds. They can connect to a server just fine over a LAN, but whenever they connect to a server hosted on the internet they get dropped. Since so many people are having this issue I decided to post a new thread instead of just posting my solution 7 pages deep in another one.

The output is similar to the following:

Client Log

[0058.77] DevNet: Browse: /TT-T_Sandbox1?Name=Player?Team=255
[0058.77] Init: WinSock: Socket queue 32768 / 32768
[0058.77] DevNet: Game client on port 7777, rate 10000
[0059.67] DevNet: Welcomed by server (Level: TT-T_Sandbox1, Game: Titan.TitanGame)
[0059.79] NetComeGo: Close TcpNetDriver_0 TcpipConnection_0 :7777 09/18/11 20:55:44
[0059.80] Log: Pending connect to '/TT-T_Sandbox1?Name=Player?Team=255?game=Titan.TitanGame' failed; Your connection to the host has been lost.
[0059.80] ScriptLog: (UTGameViewportClient_0) UTGameViewportClient::None:NotifyConnectionError Message:'Your connection to the host has been lost.' Title:'Connection Lost'
[0059.82] DevNet: URL: Adding default option Name=Player
[0059.82] DevNet: URL: Adding default option Team=255
[0059.82] DevNet: Browse: TT-T_Sandbox1?closed?Name=Player?Team=255
[0059.82] Log: Failed; returning to Entry
[0060.10] Log: LoadMap: TT-T_Sandbox1?closed?Name=Player?Team=255

Server Log

DevNet: NotifyAcceptingConnection: Server TheWorld accept
NetComeGo: Open TheWorld 09/18/11 22:24:04
DevNet: NotifyAcceptingChannel Control 0 server World TT-T_Sandbox1.TheWorld: Accepted
DevNet: Remote platform is 1
NetComeGo: Close TcpNetDriver_0 TcpipConnection_4 :59619 09/18/11 22:24:04
DevNet: NotifyAcceptingConnection: Server TheWorld accept
NetComeGo: Open TheWorld 09/18/11 22:24:04
NetComeGo: Close TcpNetDriver_0 TcpipConnection_5 :59619 09/18/11 22:24:04
DevNet: NotifyAcceptingConnection: Server TheWorld accept
NetComeGo: Open TheWorld 09/18/11 22:24:04

I noticed that this problem vanished when I tested with a teammate after cooking and packaging, and I believe I know why. After cooking and packaging a file appeared in my UDK//Binaries folder called UnSetup.Game.xml. This XML file contains two fields, GameUniqueID and MachineUniqueID. I noticed this file also was packaged with my installer. I decided to copy that file from package-created installation folder and place it in my development Binaries folder that is under source control which ensured all teammates had the identical file.

This seems to have solved the problem. My assumption is that the engine cares about the GameUniqueID when an internet multiplayer session is started, but it seems to ignore it for LAN games.

So to recap, if you are having this issue, please try the following.

  1. Using Unreal Frontend, fully recompile all scripts
  2. Cook all game packages
  3. Package your game into a UDK installer
  4. Install the game from that installer, and look in the Binaries folder in that new directory for UnSetup.Game.xml
  5. Copy that xml file back into the Binaries folder in your UDK development folder
  6. Ensure all teammates have an identical file

Best of luck to you!

,