Почему мои гнезда закрываются через определенное время? - PullRequest
0 голосов
/ 16 октября 2019

Я хотел бы знать, почему сокеты, которые я открываю, закрываются через несколько секунд / минут.

На стороне сервера у меня есть пользовательский интерфейс, который показывает мне количество открытых соединений. Поэтому, когда я запускаю код, указанный ниже, сумма начинает увеличиваться. Поэтому, когда я достигаю, например, 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). Я подумал, что, возможно, метод сна решит эту проблему, но это не так.

  • Я не могу добавить свой сервер здесь. Код слишком сложный. Но я могу сказать, что у меня нет возможности закрывать входящие соединения. Поэтому обычно все должно оставаться в курсе.

  • Если вы считаете, что есть лучший способ сделать это, пожалуйста, дайте мне знать.

Спасибо взаранее.

...