Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
5 / 5 / 5
Регистрация: 15.08.2013
Сообщений: 90
.NET 4.x

Как узнать что удаленный клиент отключился

19.09.2013, 13:06. Показов 2167. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
При подключение клиента создается список клиентов
C#
1
2
3
4
5
6
7
8
9
NetworkStream networkStream = clientSocket.GetStream();
                    networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
                    dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
                    dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
                    if (clientsList.Contains(dataFromClient))
                    {
                        clientsList.Remove(dataFromClient);                     
                    }
                    clientsList.Add(dataFromClient, clientSocket);
можно ли испотльзуя данный список узнать что клиент отключился(отключение аварийное т.е при сбои программы... или закрытии процесса)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.09.2013, 13:06
Ответы с готовыми решениями:

Клиент-сервер: Как определить, что клиент отключился?
Привет. Есть клиент и сервер, при подключении клиента, на сервере создается класс, который содержит копию сокета и всякую инфу клиента, и...

Узнать, что отключился TcpClient
Добрый день. Прекрасно понимаю, что реализаций всяческих многопоточных серверов тонны в интернете. Каждый делает их по-своему, нет никакого...

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что сервер(клиент) не отвечает в течении...

4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.09.2013, 14:53
Здравствуйте.

Цитата Сообщение от Sue405090 Посмотреть сообщение
C#
1
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
Если удаленный хост закрыл соединение, то этот метод вернет 0, если соединение разорвалось, то вылетит SocketException.
1
5 / 5 / 5
Регистрация: 15.08.2013
Сообщений: 90
20.09.2013, 09:53  [ТС]
Возник еще один вопрос.

При подключении к серверу клиент дабовляется в список
C#
1
2
3
 Hashtable clientsList = new Hashtable();
 
 clientsList.Add(dataFromClient, clientSocket);
при возвращения 0 этой функцией
C#
1
 networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
мне нужно удалить из списка клиента который отключился
пробую так
C#
1
  clientsList.Remove(clientSocket);
но он остается. В чем я ошиблась?
0
 Аватар для SharpDeveloper
141 / 138 / 22
Регистрация: 16.02.2012
Сообщений: 453
20.09.2013, 13:23
Цитата Сообщение от Sue405090 Посмотреть сообщение
Возник еще один вопрос.

При подключении к серверу клиент дабовляется в список
C#
1
2
3
 Hashtable clientsList = new Hashtable();
 
 clientsList.Add(dataFromClient, clientSocket);
при возвращения 0 этой функцией
C#
1
 networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
мне нужно удалить из списка клиента который отключился
пробую так
C#
1
  clientsList.Remove(clientSocket);
но он остается. В чем я ошиблась?
Так вы удаляете значение, а надо ключ, наверное так вы хотели бы:
C#
1
  clientsList.Remove(dataFromClient);

Не по теме:

А вообще архитектура у вас ужасная, но это совсем другой разговор.

0
5 / 5 / 5
Регистрация: 15.08.2013
Сообщений: 90
20.09.2013, 14:36  [ТС]
Вот мой код не получается....
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
    static void Main(string[] args)
        {           
            TcpListener serverSocket = new TcpListener(8001);
            TcpClient clientSocket = default(TcpClient);
            int counter;
            serverSocket.Start();
            Console.WriteLine("Ожидаем подключения ....");
            counter = 0;
            string dataFromClient = null;
 
            while ((true))
            {
                try
                {
                    counter += 1;
                    clientSocket = serverSocket.AcceptTcpClient();
 
                    byte[] bytesFrom = new byte[10025];
                    dataFromClient = null;
 
                    NetworkStream networkStream = clientSocket.GetStream();
                    networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
                    dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
                    dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
                    if (clientsList.Contains(dataFromClient))
                    {
                        clientsList.Remove(dataFromClient);
                        ListHost.Remove(dataFromClient);
                    }
                    clientsList.Add(dataFromClient, clientSocket);    
                    ListHost.Add(dataFromClient);
                    if (dataFromClient == "exit")
                    {
                        clientSocket.Close();
                    }
                    broadcast(dataFromClient, dataFromClient, false);
 
                    Console.WriteLine(dataFromClient);
                    handleClinet client = new handleClinet();
                   
                    client.startClient(clientSocket, dataFromClient, clientsList);
                    //System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(SaveList), null, 0, 10000);
                    //ListHost.Clear();
                }
                catch (Exception ex)
                {                   
                    clientsList.Remove(dataFromClient);
                    ListHost.Remove(dataFromClient);
                    clientSocket.Close();
                    serverSocket.Stop();
                    Console.WriteLine("exit");              
                }
            }           
            
        }
не как не реагирует но отключение клиента

Добавлено через 2 минуты
Цитата Сообщение от SharpDeveloper Посмотреть сообщение
Так вы удаляете значение, а надо ключ, наверное так вы хотели бы:
Код C#
1
* clientsList.Remove(dataFromClient);
Возможно.... но при подключении нового клиента dataFromClient изменится или при посылке сообщения....


суть в том что число клиентов пока что 24 нужно отметить кто в онлайне а кто нет и чтоб при отключении клиента менялся его статус
я в тупике... куда двигаться дальше не знаю....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2013, 14:36
Помогаю со студенческими работами здесь

Как узнать о том, что клиент дисконектнулся от сервера?
Здравствуйте. Делаю сервер. В нем есть подсчет пользователей онлайн. Прибавить пользователя, при подключении к сокету легко, но вот как...

Узнать, что загрузка файла на удаленный сервер выполнена полностью
Всем доброго времени суток!!! Подскажите, пожалуйста, по такому вопросу: пишу программу, которая должна мониторить удаленный сервер...

Узнать удаленный IP в сокете
Никто не подскажет, как получить адрес IP того, кто подключился на моего листенера? Т.е. у меня есть сокет листенер, он ждет пока,...

TcpClient. Как понять на сервере что клиент отключился?
как понять на сервере что клиент отключился?

Как узнать отправил ли клиент данные или нет ?
Доброго времени суток! У кого нибудь есть исходники проверки отправил ли данные клиент или нет ? У меня не получается сделать. Помогите...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru