PDA

Просмотр полной версии : Стабильность TCP соединения.



iman
14.03.2016, 21:14
Добрый день,
пишу TCP сервер на ПЛК, на данный момент уже есть связь с клиентом на ПК. но когда я подключаюсь через некоторое время (всегда разное) ПЛК разрывает связь.
Вопрос так должно быть? или я с программой накосячил.

P.S проверял на ПЛК110 и ПЛК150, в качестве клиента использовал telnet.

Scream
15.03.2016, 08:30
Добрый день,
пишу TCP сервер на ПЛК, на данный момент уже есть связь с клиентом на ПК. но когда я подключаюсь через некоторое время (всегда разное) ПЛК разрывает связь.
Вопрос так должно быть? или я с программой накосячил.

P.S проверял на ПЛК110 и ПЛК150, в качестве клиента использовал telnet.

Плк разрывает сразу связь?

"но когда я подключаюсь через некоторое время (всегда разное) ПЛК разрывает связь."
нельзя помиловать казнить

iman
15.03.2016, 10:19
Плк разрывает сразу связь?

нет не сразу, время соединения составляет от 10 секунд до одной минуты.


через через некоторое время (всегда разное)

capzap
15.03.2016, 10:39
нет не сразу, время соединения составляет от 10 секунд до одной минуты.

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

Scream
15.03.2016, 11:11
нет не сразу, время соединения составляет от 10 секунд до одной минуты.

Так должно быть, если это таймаут и на любом ПК будет работать так же (примерно).
есть такая штука как keepAlive, почитайте, суть - поддерживать соединения, во время простоя.

iman
15.03.2016, 12:20
Как я понял есть два варианта. Первый соединиться, передать данные, получить ответ, разорвать соединение, или же подключится, получать и передавать данные , а между простоями отправлять пустые пакеты для поддержания связи?

P.S думаю первый вариант больше подходит.

Scream
15.03.2016, 14:53
Как я понял есть два варианта. Первый соединиться, передать данные, получить ответ, разорвать соединение, или же подключится, получать и передавать данные , а между простоями отправлять пустые пакеты для поддержания связи?

P.S думаю первый вариант больше подходит.

Какой вариант, как и чем надо думать в каждой задаче.
У меня есть устройства 24\7 в сети, поэтому у них соединение поддерживается, не обязательно пустые пакеты, я передаю промежуточную информацию, не критичную.
Есть машины которые работают по сменам, там тоже если включена, то устанавливается онлайн и при разрыве восстанавливается и поддерживается.
А соединиться\передать\отключиться я не понимаю где это нужно такое одноразовое, каждому своё, тут вообще udp советуют как наиболее легкий путь.

Во всяком случае примите факт, что таймаут был, есть и будет.

capzap
15.03.2016, 15:09
А соединиться\передать\отключиться я не понимаю где это нужно такое одноразовое, каждому своё, тут вообще udp советуют как наиболее легкий путь.
в отношении овеновских плк для сервера очень даже пригодится, когда по сети могут подключаться несколько клиентов, чтоб взять разово какую либо информацию. Если кто то "присосется" на постоянно, то остальные не получат соединение с сервером

iman
15.03.2016, 15:53
в отношении овеновских плк для сервера очень даже пригодится, когда по сети могут подключаться несколько клиентов, чтоб взять разово какую либо информацию. Если кто то "присосется" на постоянно, то остальные не получат соединение с сервером

А у овеновских плк что не так? я не могу сделать так:


HD_Soc:=SysSockCreate(SOCKET_AF_INET,SOCKET_STREAM ,SOCKET_IPPROTO_TCP);

tcp_adr.sin_family:=SOCKET_AF_INET;
tcp_adr.sin_port:=port;
tcp_adr.sin_addr:=SOCKET_INADDR_ANY;

SysSockBind(HD_Soc,ADR(tcp_adr),SIZEOF(tcp_adr));

SysSockListen(HD_Soc,5);


для пяти клиентов?

Yegor
15.03.2016, 16:11
Один клиент на порт. Ограничение ПЛК. Кто-то из сотрудников тут на форуме говорил уже.

Scream
15.03.2016, 16:51
в отношении овеновских плк для сервера очень даже пригодится, когда по сети могут подключаться несколько клиентов, чтоб взять разово какую либо информацию. Если кто то "присосется" на постоянно, то остальные не получат соединение с сервером

мне надо было уточнить. у меня плк всегда клиент на библиотеках.
Иногда и сервер и клиент для разных задач.

Филоненко Владислав
15.03.2016, 18:11
старый да, 1 клиент на сокет, а не на порт. 2 сокета - 2 клиента и т.д.
На М02 уже более "классическая" реализация listen/accept - но и там десятки, но не тысячи соединений.

iman
16.03.2016, 08:42
А как можно получить айришник того кто ко мне на ПЛК подключился?

capzap
16.03.2016, 08:53
А как можно получить айришник того кто ко мне на ПЛК подключился?

по форуму поищите, выкладывался пример где искать адрес клиента