Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проверить если TCP соединение живое. / 14 сообщений из 14, страница 1 из 1
18.12.2017, 09:28
    #39571176
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
Я открываю TCP сервер. Как мне проверить что сокет клиента живой, что соединение с клиентом присутствует?
...
Рейтинг: 0 / 0
18.12.2017, 10:03
    #39571192
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
jenya7,

только обменяться данными
...
Рейтинг: 0 / 0
18.12.2017, 10:29
    #39571212
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
Изопропилjenya7,

только обменяться данными
в эмбедед когда я открываю сокет я включаю KEEPALIVE опцию. А в С# если я создал TCP Listener - у него есть такая опция?
...
Рейтинг: 0 / 0
18.12.2017, 10:51
    #39571236
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
jenya7,

Опция есть, но работает keepalive совсем не так как многие ожидают
...
Рейтинг: 0 / 0
18.12.2017, 11:17
    #39571259
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
Изопропилjenya7,

Опция есть, но работает keepalive совсем не так как многие ожидают
а что вы посоветуете? как сделать?
...
Рейтинг: 0 / 0
18.12.2017, 11:19
    #39571261
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
jenya7,

Предусмотреть в своём протоколе обмен эхо-пакетами
...
Рейтинг: 0 / 0
18.12.2017, 11:30
    #39571272
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
Изопропилjenya7,

Предусмотреть в своём протоколе обмен эхо-пакетами
но keepalive так и работает - он посылает системный пакет (len=0) и получает ответ.
...
Рейтинг: 0 / 0
18.12.2017, 12:03
    #39571290
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
jenya7,

Параметр означает Не закрывать и переиспользовать соединение. Так что уточняйте вопрос.
...
Рейтинг: 0 / 0
18.12.2017, 12:59
    #39571336
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
Petro123jenya7,

Параметр означает Не закрывать и переиспользовать соединение. Так что уточняйте вопрос.
в эмбеде мы делаем так - если есть ошибка мы закрываем сокет и открываем заново, пытаемся сделать реконект, если нет ошибки а просто нет связи с сервером мы сокет не закрываем. А как это сделать в С#?
...
Рейтинг: 0 / 0
18.12.2017, 13:20
    #39571348
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
jenya7эмбеде мы делаем так
Фиг знает что это, но думаю, что точно также пишите и тут. Imho.
...
Рейтинг: 0 / 0
19.12.2017, 18:32
    #39572231
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
TCP соединение всегда живое, потому что это протокол передачи данных. Имеет смысл проверять, открыт ли нужный порт по протоколу TCP

jenya7А в С# если я создал TCP Listener - у него есть такая опция?
Listener пассивно слушает, а вам надо активно проверить.

Если не забуду, то завтра с работы дам код
...
Рейтинг: 0 / 0
19.12.2017, 18:55
    #39572242
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
jenya7но keepalive так и работает - он посылает системный пакет (len=0) и получает ответ.
и как часто?
как приложение узнаёт о потере связи?


У Стивенса в книге всё хорошо описано
...
Рейтинг: 0 / 0
20.12.2017, 09:52
    #39572476
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если 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.
    public bool PingPort(string IP, int port, int timeout_mcek = 500)
    {
        bool ret = false;
        using (Socket socket = new Socket(AddressFamily.InterNetwork,
                    SocketType.Stream,
                    ProtocolType.Tcp))
        {
            IPEndPoint point = new IPEndPoint(IPAddress.Parse(IP), port);
            var result = socket.BeginConnect(point, null, null);

            ret = result.AsyncWaitHandle.WaitOne(timeout_mcek, true);
            if (ret)
            {
                if (socket.Connected)
                socket.EndConnect(result);

            }
            else
            {
                socket.Close();
            }
        }
        return ret;
    }
...
Рейтинг: 0 / 0
24.12.2017, 17:36
    #39575016
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить если TCP соединение живое.
Cat2,
спасибо. попробую.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проверить если TCP соединение живое. / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]