C# как закрыть соединения, перечисленные в tcpconnectioninformation
Я создаю список подключений с помощью TcpConnectionInformation, после чего нахожу в этом списке адрес, который используется в моей программе внешним IP-адресом Поля remoteendpoint Какая команда используется для закрытия найденного соединения? Эта задача аналогична программе Russinovich TCPView.
private void ClearConnection() { IPGlobalProperties IPGproperties = IPGlobalProperties.GetIPGlobalProperties(); TcpConnectionInformation[] connections = IPGproperties.GetActiveTcpConnections(); foreach (TcpConnectionInformation tcp in connections) { if (IP_Address.Equals(tcp.RemoteEndPoint.ToString())) { // What to write to close the found connection? } } }
Что я уже пробовал:
Я нашел похожий вопрос с решением, которое не действовать.
private void ClearConnection() { IPGlobalProperties IPGproperties = IPGlobalProperties.GetIPGlobalProperties(); TcpConnectionInformation[] connections = IPGproperties.GetActiveTcpConnections(); foreach (TcpConnectionInformation tcp in connections) { if (IP_Address.Equals(tcp.RemoteEndPoint.ToString())) { Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { mySocket.Bind(tcp.LocalEndPoint); mySocket.Shutdown(SocketShutdown.Both); } catch (Exception ex) {} finally { mySocket.Close(); } } } }
Dave Kreskowiak
Если вы говорите о соединениях, которые принадлежат не вашему приложению, а другим приложениям, вы напрашиваетесь на неприятности. То, что вы собираетесь в конечном итоге сделать, - это вызвать исключения или сбой тех приложений, которые используют эти соединения.
Gerry Schmitz
То, что сказал Дэйв.
Afzaal Ahmad Zeeshan
Почему вы не можете закрыть соединения внутри вашего приложения до того, как оно завершится?
Leonid Kazakov
Я использую Telegram API
https://github.com/telegramdesktop/tdesktop
Сайт webproxy сайт webproxy = новый сайт webproxy(telegramProxy, правда);
TelegramBotClient Bot = новый TelegramBotClient(telegramToken, webProxy);
Эти две команды создают 2 соединения.
Я хочу отключиться от бота. Я выполняю код.
Бот.StopReceiving();
Бот.SetWebhookAsync("");
Bot = null;
сайт webproxy = нуль;
В результате остается одно соединение. При повторном выполнении кода.
сайт webproxy = новый сайт webproxy(telegramProxy, правда);
Бот = новый TelegramBotClient(telegramToken, webProxy);
2 соединения создаются снова. При 3 циклах включения и выключения уже создано 3 неполных соединения. Часто Telegam считает это нарушением и запрещает подключение. Чтобы решить эту проблему, закройте приложение, чтобы сборщик мусора закрыл все соединения.
Afzaal Ahmad Zeeshan
Так что, оставляя его на сборке мусора, обычно не работает. Одна вещь, которую вы можете сделать, - это использовать это внутри блока using, чтобы приложение очищало ресурсы до того, как оно закроется.
Dave Kreskowiak
Никогда о таком не слышал. Никогда им не пользовался и сейчас не собираюсь.
В этом заключается проблема с использованием библиотек с GitHub, которые не имеют прикрепленных к ним форумов поддержки. Вы, по сути, сами по себе и должны сами во всем разбираться и, возможно, даже исправлять ошибки в проекте.