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

时间:2016-03-21 14:34:49

标签: c# unity5 unity-networking

我正在尝试联网一款小型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始终为空,即使第一个玩家成功创建和注册服务器也是如此。

1 个答案:

答案 0 :(得分:3)

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

一般情况下,我建议您根据自己的需要调查SingalR技术,它使用websockets。