0

我正在尝试联网一个小型 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 时,它会刷新主机列表。如果它找到一个主机,它将加入他们的服务器并开始匹配。如果没有,它将启动自己的服务器并等待另一个玩家。测试时,第一个点击 Find Match 的玩家能够启动服务器,但随后第二个玩家收到错误消息“...监听端口是否已在使用中?”。当我调试并逐步执行我的程序时,第二个玩家的 hostList 始终为空,即使第一个玩家成功创建和注册了服务器。

4

1 回答 1

3

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

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

于 2016-03-21T14:42:15.257 回答