【问题标题】:Is listen port already in use? Unity networking error监听端口是否已经在使用? unity网络错误
【发布时间】:2016-03-21 14:34:49
【问题描述】:

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

【问题讨论】:

    标签: c# unity5 unity-networking


    【解决方案1】:

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

    一般来说,我建议您研究 SingalR 技术以满足您的需求,它使用 websockets。

    【讨论】:

    • 酷,我真的不知道而且很好奇
    • 再次,网络新手,如果我错了,请纠正我,但是第二个玩家正在尝试加入第一个玩家服务器,而不是用相同的端口初始化一个新的?
    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2012-06-09
    • 2019-09-22
    • 2023-03-15
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多