Спасибо, это очень хороший пример, и я проверил в своем проекте и успешно работал с некоторыми изменениями моих потребностей ... Спасибо, брат
я есть этот метод работает в потоке, но когда я тестирую его, сообщают все порты как открытые. похоже, что метод:var result = client.BeginConnect(host, port, null, null);
не работает хорошо при передаче результатов вvar success = result.AsyncWaitHandle.WaitOne(tcpTimeout);
...
Есть идеи, как это решить?
я пыталсяclient.ConnectAsync(host,port).Wait(TcpTimeout);
но это не работает, как ожидалось тоже ....
public void start()
{
Thread thread1 = new Thread(new ThreadStart(RunScanTcp));
thread1.IsBackground = true;
thread1.Name = "THREAD ME EMER : " + i;
thread1.Priority = System.Threading.ThreadPriority.Highest;
thread1.Start();
}
public void RunScanTcp()
{
while (((port = portList.NextPort()) != -1) && (nderprit != true))
{
TcpClient client = new TcpClient();
count = port;
tcp_count = tcp_count + 1;
Thread.Sleep(10);
try
{
var mre = new ManualResetEvent(false);
Console.WriteLine("Current port count : " + port);
var result = client.BeginConnect(host, port, null, null);
var success = result.AsyncWaitHandle.WaitOne(tcpTimeout);
if (success)
{
Console.WriteLine("PORT IS OPEN : " + port);
received_tcp = received_tcp + 1;
Activity.RunOnUiThread(() =>
{
mre.Set();
});
mre.WaitOne();
client.Close();
}
else
{
client.Close();
}
}
catch (Exception)
{
client.Close();
}
}
}