.NET 4.x Почему код генерирует одинаковые IP-адреса? - C#
Формулировка задачи:
Здравствуйте
Я сделал программу, которая создает рандомный IP, после чего проверяет, существует ли он. Если IP существует, то тогда в консоли высвечивается этот самый IP. Для большей эффективности я сделал программу многопоточной. Но по неизвестной мне причине несколько потоков (В основном все) рандомят одинаковый IP.
Код:
Почему это происходит? Из-за чего? Как это пофиксить? Очень благодарен тем, кто помог
List<Thread> _Threads = new List<Thread>();
Console.Clear();
Console.Write("Введите количество потоков : ");
int _ThreadsCount = Convert.ToInt32(Console.ReadLine());
Console.Clear();
for (int i = 0; i < _ThreadsCount; i++)
{
Thread _Thread = new Thread(_Find);
_Thread.Name = "ThreadN" + i;
_Threads.Add(_Thread);
Console.WriteLine("Создание потоков. Выполнено {0:P2}", Convert.ToDouble(i) / Convert.ToDouble(_ThreadsCount));
}
Console.Clear();
Console.WriteLine("Поиск доменов...\n====================\n");
for (int i = 0; i < _Threads.Count; i++)
{
_Threads[i].Start();
}
void _Find()
{
Random _Rnd = new Random();
System.Net.NetworkInformation.Ping _Ping = new System.Net.NetworkInformation.Ping();
string _IP = null;
while (true)
{
try
{
_IP = String.Format("{0}.{1}.{2}.{3}", _Rnd.Next(0, 256), _Rnd.Next(0, 256), _Rnd.Next(0, 256), _Rnd.Next(0, 256));
System.Net.NetworkInformation.PingReply _PingR = _Ping.Send(_IP, 250);
if (_PingR.Status == System.Net.NetworkInformation.IPStatus.Success)
{
Console.WriteLine(_IP);
}
}
catch
{
_IP = null;
}
}
}
Извините, долго думал, как написать тему, а изменить название темы забыл..
Решение задачи: «.NET 4.x Почему код генерирует одинаковые IP-адреса?»
textual
Листинг программы
class Program
{
private static Random rnd = new Random();
static viod Main()
{
// не чего не изменилось, rnd использовать так же
// _IP = String.Format("{0}.{1}.{2}.{3}", rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256));
}
}