侦听端口是否已被使用? Unity网络错误

Is listen port already in use? Unity networking error

我正在尝试联网一个小型 2 人 Unity 游戏。这是我第一次接触网络,所以请随时纠正我做错的任何事情。我正在尝试提供一个简单的匹配服务,在游戏的主菜单上,玩家可以单击“查找匹配”按钮。这将执行以下功能

private HostData[] hostList;
private const string typeName = "UniqueGameName";
private const string gameName = "RoomName";
public void FindMatch() {
    RefreshHostList();
    if (hostList != null) {
        JoinServer(hostList[0]);
    } else {
        StartServer();
    }
}

下面是该函数中调用的相应方法。

private void RefreshHostList()
{
    MasterServer.RequestHostList(typeName);
}

void OnMasterServerEvent(MasterServerEvent msEvent)
{
    if (msEvent == MasterServerEvent.HostListReceived)
        hostList = MasterServer.PollHostList();
}

private void JoinServer(HostData hostData)
{
    Network.Connect(hostData);
}

private void StartServer()
{
    Network.InitializeServer(2, 25000, !Network.HavePublicAddress());
    MasterServer.RegisterHost(typeName, gameName);
}

思路是,当玩家点击查找匹配时,会刷新主机列表。如果找到主机,它将加入他们的服务器并开始匹配。如果没有,它将启动自己的服务器并等待另一个玩家。测试时,第一个点击 Find Match 的玩家可以启动服务器,但第二个玩家收到错误消息“...监听端口是否已被使用?”。当我调试并逐步执行我的程序时,即使第一个玩家成功创建和注册了服务器,第二个玩家的 hostList 始终为空。

您是否在同一台机器上使用这两个应用程序实例?如果你占用了一次网络端口,那么你将无法在同一台机器上的同一端口上初始化服务器。

总的来说,我建议根据您的需要研究 SingalR 技术,它使用 websockets。