【问题标题】:How to find all ip adresses in Lan using TcpClient如何使用 TcpClient 查找局域网中的所有 IP 地址
【发布时间】:2019-11-26 11:58:00
【问题描述】:

我正在尝试使用TcpClient 列出本地网络中打开某个端口以进行侦听的所有 IP 地址。

下面的代码可以运行,但问题是它非常慢并且会阻止 UI 的执行。我需要一个可以列出 ip 地址并且可以每秒刷新一次的代码(或者如果可能的话更好)。

这是我尝试过的:

    public void Start()
    {
        StartCoroutine(ScanNetwork());
    }


    IEnumerator ScanNetwork()
    {
        while (true)
        {
            yield return new WaitForSeconds(1);
            for (int i = 0; i < 254; i++)
            {
                string address = "192.168.1." + i;
                TcpClient client = new TcpClient();
                if (client.ConnectAsync(IPAddress.Parse(address), GameManager.PORT).Wait(5))
                {
                    Debug.Log("Success @" + address);
                }
                client.Dispose();
            }
        }
    }

【问题讨论】:

  • 假设 192.168.1.x 已经是一个根本性的错误......
  • 你在域控制器下吗?
  • @AustinTFrench,以及假设任何网络是/24。这个错误我已经见过太多次了。
  • @RonMaupin 同意,但我认为在任何级别进入子网划分的任何代码都可能有点太多信息(至少对于 cmets ;))

标签: c# unity3d networking ip


【解决方案1】:

我做了这样的事情你可以试试吗:

    private static void ScanNetwork(int port)
    {
        string GetAddress(string subnet, int i)
        {
            return new StringBuilder(subnet).Append(i).ToString();
        }

        Parallel.For(0, 254, async i =>
        {
            string address = GetAddress("192.168.1.", i);

            using (var client = new TcpClient())
            {
                try
                {
                    await client.ConnectAsync(IPAddress.Parse(address), port).ConfigureAwait(false);

                    await Task.Delay(5).ConfigureAwait(false);

                    if (!client.Connected) return;

                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine($"Success @{address}");

                    client.Close();
                }
                catch (SocketException ex)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine($"Failed @{address} Error code: {ex.ErrorCode}");
                }
            }
        });
    }

【讨论】:

    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多