Я хотел бы знать, почему сокеты, которые я открываю, закрываются через несколько секунд / минут.
На стороне сервера у меня есть пользовательский интерфейс, который показывает мне количество открытых соединений. Поэтому, когда я запускаю код, указанный ниже, сумма начинает увеличиваться. Поэтому, когда я достигаю, например, 5000 открытых соединений, внезапно количество соединений X падает. Понятия не имею, почему это происходит.
Я запускаю метод в разных потоках, чтобы ускорить процесс.
Какие у меня проблемы?
- Сокеты автоматически закрываются через несколькосекунд / минут в зависимости от количества потоков.
Иногда возникает исключение SocketException, это происходит, если я увеличиваю количество потоков.
System.Net.Sockets.SocketException (0x80004005): попытка подключения не удалась, потому что подключенная сторона не ответила правильно через определенное время, или не удалось установить соединение, потому что подключенный хост не ответил
static void Main(string[] args)
{
for (int i = 0; i < 100; i++)
{
Thread thread = new Thread(HitOne);
thread.Start();
}
}
static void HitOne()
{
while(true)
{
/*
* Sleep to prevent network from losing connection
* (Not sure if this is correct)
*/
Thread.Sleep(5000);
try
{
TcpClient client = new TcpClient(IP, PORT);
}
catch (SocketException e)
{
Console.WriteLine(e);
}
};
}
Это нормально? что сокет закрывается через определенное время? Вначале я думал, что огромное количество потоков и соединений может разорвать мою сеть (как это сделала бы атака ddos). Я подумал, что, возможно, метод сна решит эту проблему, но это не так.
Я не могу добавить свой сервер здесь. Код слишком сложный. Но я могу сказать, что у меня нет возможности закрывать входящие соединения. Поэтому обычно все должно оставаться в курсе.
Если вы считаете, что есть лучший способ сделать это, пожалуйста, дайте мне знать.
Спасибо взаранее.