Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
1

Определить отключение сокета от сервера

01.12.2016, 16:40. Показов 1504. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нашёл пару тем на форуме но не понял как сделать Там написано что при нормальном отключение сервер шлёт сообщение длиной 0 байт, но как его отловить при использовании стримов не понятно.
Читаю с сокета в отдельном потоке:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        public static void DoWork()
        {
            NetworkStream ns;
            BinaryReader br;
 
            ns = new NetworkStream(socket);
            br = new BinaryReader(ns);
 
            while (true)
            {
                if (ns.DataAvailable)
                {
                    // тут читаю данные
                }
                else
                    Thread.Sleep(10);
            }
        }
Добавлено через 28 минут
Пишу клиентское приложение, т.е. наверное будет наоборот - отключение сервера от сокета
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2016, 16:40
Ответы с готовыми решениями:

Как получить IP-адрес сервера из его сокета?
Всем добрый день. Помогите, пожалуйста, разобраться. Есть клиент серверное приложение на сокетах....

Использование сокета в качестве сервера или клиента по ситуации
В большинстве клиент-серверных приложений сначала запускают сервер , затем клиентов. Но захотелось...

Правда ли, что для приёма данных с сервера и отправки их на сервер нужно использовать два сокета
Всем доброго времени суток. Пишу сетевое приложение и у меня появилось два вопроса: 1)Правда, что...

Из-за чего событие чтение сокета у сервера может вызываться бесконечно?
Из за чего событие чтение у сервера может вызываться бесконечно? Если закрыть клиент как программу,...

3
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
02.12.2016, 12:03 2
Может тогда лучше в отдельном потоке запускать свой наследник TcpListener'a, для считывания данных использовать его метод GetStream(), для ожидания подключения клиентов - AcceptTcpClient()?

А проверку состояния можно организовать следующим образом, сделав своего наследника TcpListener и использовав его:
C#
1
2
3
4
5
6
7
8
9
10
    public class TcpListenerEx : TcpListener
    {
        public TcpListenerEx(IPEndPoint localEP) : base(localEP) { }
        public TcpListenerEx(IPAddress localaddr, int port) : base(localaddr, port) { }
 
        public new bool Active
        {
            get { return base.Active; }
        }
    }
0
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
02.12.2016, 12:10  [ТС] 3
Цитата Сообщение от Rameron Посмотреть сообщение
для ожидания подключения клиентов - AcceptTcpClient()
я пишу клиентское приложение, нужно ловить отключение от сервера, или я вас не правильно понял?
0
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
02.12.2016, 12:18 4
Цитата Сообщение от Jotun Посмотреть сообщение
я пишу клиентское приложение
Нет, это я неправильно понял. А если там, где вы читаете данные, использовать конструкцию:
C#
1
2
3
4
5
byte[] buffer = new byte[1024];
int read;
while((read = ns.Read(buffer, 0, buffer.Length) > 0) {
    // работаем с данными из буфера
}
Соответственно, если read равно нулю, то произошло отключение. Правда сервер в это время может и не отдавать данные, но тогда не знаю...
0
02.12.2016, 12:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2016, 12:18
Помогаю со студенческими работами здесь

Отключение TcpClient от сервера
Добрый вечер! Создаю TcpCLient и коннекчу его к серверу TcpClient TCP = new TcpClient();...

Как определить (нештатное) отключение сервера в клиент-серверном приложении (tcp Socket)
Есть некое приложение на вин. форм, которое постоянно соединятся с сервером. При нормальном...

Считывание ответа сервера из сокета
Всем добрый вечер! Недавно начал работать с сокетами и почти сразу столкнулся с проблемой - не...

Работа с сокетами. Создание сокета сервера
Проверьте, пожалуйста программу (она еще не дописана до конца), выскажите замечания. #include...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru