0

我需要使用带有 ThreadPool 的 c#(我的类似主题是关于 java)制作一个程序来检查远程 pc 上的端口。端口的数量可以不同。线程数 - 我可以手动设置(我使用 5 个)。

问题是我有错误 A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond XX.XXX.XX.XX:80

这是我执行此任务的代码

private static int BEGIN = 75; //1
private static int END = 100; //65535
private static string host = "microsoft.com";
public static void concurrent()
    {
        ThreadPool.SetMaxThreads(5, 5);
        Stopwatch p = new Stopwatch();
        p.Start();

        for (int i = BEGIN; i <= END; i++)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(check), i);
        }
        p.Stop();
        Console.WriteLine("Time with concurrency {0}", p.Elapsed);
    }

    private static void check(object o)
    {
        Console.WriteLine("Thread {0} checks port {1}", Thread.CurrentThread.GetHashCode(), (int)o);
        Lab1.makeTCP((int)o);
        //Thread.Sleep(1000);
    }

private static void makeTCP(int port)
    {
        IPAddress ipadr = Dns.GetHostAddresses(host)[0];

        try
        {
            Socket sock = new Socket(AddressFamily.InterNetwork, 
                                        SocketType.Stream, 
                                        ProtocolType.Tcp);
            sock.Connect(ipadr, port);
            if (sock.Connected)
                Console.WriteLine("Port {0} is closed", port);
            sock.Close();

            return;
        }
        catch (SocketException exc)
        {
            if (exc.ErrorCode == 10061)
                Console.WriteLine("Port {0} is open", port);
            else Console.WriteLine(exc.Message);
        }
    }

我还想知道如何确定执行此任务所需的时间。但是我的Stopwatch stop火灾比所有线程都更早完成。如何解决这个问题呢?

4

0 回答 0