【问题标题】:Fast tcp server availability check快速 tcp 服务器可用性检查
【发布时间】:2020-09-20 09:54:42
【问题描述】:

我想制作一个具有 tcp/ip 客户端的 Unity3D 应用程序。它应该定期检查是否有可用的服务器,如果有,则尝试连接到它。我尝试如下

            _client = new TcpClient(_tcpAddress, _tcpPort);
            if (!_client.Connected)
            {
                return false;
            }

但每次调用构造函数时,都会严重滞后。有没有更快的方法来检查指定端口是否有服务器?

【问题讨论】:

  • if (_client == null)永远评估为true
  • 感谢您发现错误 ;) 我已将其修复为 _client.Connected。但它仍然严重滞后

标签: c# unity3d tcp


【解决方案1】:

看看specific constructor you're using 它说(强调我的):

此构造函数创建一个新的 TcpClient 并对提供的主机名和端口号进行同步连接尝试。底层服务提供商将分配最合适的本地 IP 地址和端口号。 TcpClient 将阻塞,直到它连接或失败。此构造函数允许您在一个方便的步骤中初始化、解析 DNS 主机名并进行连接。

您的代码没有“滞后”,它正在积极等待连接成功或失败。

我建议改用default constructor 并调用BeginConnect 和相应的EndConnect 方法,或者如果您可以在Unity 中使用async/await 模式,或许可以尝试使用ConnectAsync

虽然在 Unity 中,我认为更简单的方法可能是只使用协程(我不是 Unity 程序员,所以这可能不是 100% 正确):

StartCoroutine(TestConnectionMethod());

private IEnumerator TestConnectionMethod()
{
     _client = new TcpClient(_tcpAddress, _tcpPort);
     yield return _client.Connected;
}

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多