Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для WizarД
53 / 56 / 10
Регистрация: 07.02.2011
Сообщений: 556
Записей в блоге: 1

Не прерываются Tcp соединения

29.03.2012, 01:18. Показов 1465. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Пишу многопоточную программу и столкнулся с проблемой.
Есть метод, он создает Tcp подключение к определенному серверу и ведет обмен данными с ним, но затем он должен прервать соединение, причем абсолютно.

Итак, вот код метода:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
private void log136(string login, string password)
        {
            bool exception = false;
            do
            {
                login = login.ToLower();
                byte[] serverData = new byte[1024];
                IncrementCurrentThreadsCount();
                ThreadsOut();
                Socket socket = null;
                MD5 md5 = null;
                HMACMD5 hmacMD5 = null;
                try
                {
                    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    socket.Connect(server, port);
                    socket.Receive(serverData);
                    
                    byte[] serverKey = serverData.Skip(3).Take(16).ToArray();
                    byte[] bytesLogin = Encoding.ASCII.GetBytes(login);
                    byte[] bytesPassword = Encoding.ASCII.GetBytes(password);
 
                    md5 = MD5.Create();
                    byte[] loginPlusPass = bytesLogin.Concat(bytesPassword).ToArray();
                    byte[] loginPlusPassMD5 = md5.ComputeHash(loginPlusPass);
 
                    hmacMD5 = new HMACMD5(loginPlusPassMD5);
                    byte[] passHash = hmacMD5.ComputeHash(serverKey);
 
                    byte loginLength = (byte)login.Length;
                    List<byte> packetC03 = new List<byte>();
                    packetC03.AddRange(new byte[] { 0x02, (byte)(loginLength + 18), loginLength });
                    packetC03.AddRange(bytesLogin);
                    packetC03.Add(0x10);
                    packetC03.AddRange(passHash);
 
                    socket.Send(packetC03.ToArray());//отправляем
 
                    serverData = new byte[1024];
                    socket.Receive(serverData);
                    socket.Disconnect(false);
 
                    if (serverData[0] == 0x3)//если опкод 0x03, то авторизация успешна
                    {
                        Action<string> dgv = TextOut;
                        rLog.BeginInvoke(dgv, new object[] { login + ";" + password });
                    }
                
                }
                catch (SocketException)
                {
                    exception = true;
                }
                finally
                {
                    if (socket != null)
                        socket.Dispose();
                    if (md5 != null)
                        md5.Dispose();
                    if (hmacMD5 != null)
                        hmacMD5.Dispose();
                }
                if (exception)
                    Thread.Sleep(5000);
            } 
            
            while (exception);
        }
И в итоге я получаю около 500-600 открытых tcp соединений,которые закрываются минут через семь, после закрытия программы.

Из-за чего такое вообще может быть?
И как от этого избавиться?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.03.2012, 01:18
Ответы с готовыми решениями:

Обрыв TCP соединения
Здравствуйте, уважаемые! У нас что-то непонятное происходит, требуется совет профессионала, желательно ткнуть носом в теорию. Есть у...

Получить TCP/UDP соединения для процесса
Хочу получить TCP/UDP соединения, а также определить к какаим процессам они относятся... Единственное, что нашел по этому:...

Реализовать на tcp сокетах переподключение к tcp серверу в случае потери соединения
Всем привет, подскажите как можно реализовать на tcp сокетах переподключение к tcp серверу в случае потери соединения?

3
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
29.03.2012, 07:09
Цитата Сообщение от WizarД Посмотреть сообщение
И как от этого избавиться?
Попробуйте после socket.Disconnect(...) выполнить socket.Close()
0
 Аватар для WizarД
53 / 56 / 10
Регистрация: 07.02.2011
Сообщений: 556
Записей в блоге: 1
29.03.2012, 11:27  [ТС]
Нет, соединения все-равно остаются откртыми.
Смотрю через Proc Mon(стандартная утилита в win7)
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
29.03.2012, 11:52
C#
1
aSocket.Shutdown(SocketShutdown.Both);
перед Disconnect.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2012, 11:52
Помогаю со студенческими работами здесь

Отладка TCP соединения
Всем привет. Народ, посмотрите со стороны на мой код, кто разбирается. У меня глючит клиентская часть TCP: private IPHostEntry ipHost; ...

Закрытие tcp соединения на хосте
Здравствуйте. Есть такая проблема: после разрыва соединения хост считает его открытым. Как мне закрыть соединение на хосте, если на моём...

Сцена зависает при запуске TCP-клиента, когда он подключен к TCP - серверу, при этом TCP-клиент полностью функционирует
Проблема описана в заголовке, и хотелось бы услышать ваше мнение, о том как можно решить проблему. Скрипт TCP-клиента на сцене: ...

Ошибка соединения по протоколу TCP
WCF соединений по TCP делаю по примеру и не получается вот пример конфига &lt;?xml version=&quot;1.0&quot;...

Обрыв соединения, TCP
Доброго времени всем. При реализации TCP сервера и клиента нужно организовать своевременное обнаружение проблем с соединением. У меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru