Имя: Пароль:
1C
1С v8
Winsock закрывает соединение.
0 SuperMario
 
22.05.18
11:49
Всем привет! Друзья, нужна помощь по Winsock


    ВинSock= Новый COMОбъект("MSWinsock.Winsock");
    ВинSock.Connect("172.16.0.193","6722");
    Сообщить(ВинSock.State);

возвращает состояние =7 ( sckConnected=7,Подключен);

далее отправляю данные

Если  ВинSock.State = 7  Тогда
    ВинSock.SendData ("12");
КонецЕсли;

все работает.


Но спустя минуту бездействия падет в состояние =8

sckClosing=8,Peer is closing the connection(Клиент закрыл подключение).
По коду никаких команд о закрытии я не отправляю.

Как заставить сокет не закрывать соединение?


p.s. вышел из ситуации переподключением. Но хотелось бы понять сего зверька, почему так?
1 drumandbass
 
22.05.18
12:01
(0) Для приёма нужна ВК которая будет генерить внешнее событие. Для отправки ВК не нужна.
2 SuperMario
 
22.05.18
12:11
(1) у меня только отправка.
Это сетевое двухканальное реле SR-201.
Управление для СКУД.
Работает, но падает соединение с ней. Я так понимаю, что это win7 делает для подвисших сокетов сама?
3 eklmn
 
гуру
22.05.18
12:16
(2) потому что слушать привилегия сервера.
У тебя клиент, его дело отправить и закрыться.
4 SuperMario
 
22.05.18
12:32
(3) понимаю.
5 Вафель
 
22.05.18
12:34
тебе нужен режим keep-alive
6 SuperMario
 
22.05.18
12:43
(5) что-то вроде этого?

Установка параметров tcp_keepalive на сервере Windows

Вы должны обладать правами Администратора к серверу. В разделе реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
создайте параметр DWORD с именем KeepAliveTime и значением 300000 (десятичным). Параметр задаётся в миллисекундах, поэтому предлагаемое значение — это 5 минут. После чего остановите Caché и перезагрузите сервер.

Что касается двух других параметров tcp_keepalive, то их умолчания в Windows таковы:

KeepAliveInterval
Key: Tcpip\Parameters
Value Type: REG_DWORD—time in milliseconds
Valid Range: 0–0xFFFFFFFE
Default: 1000 (1 секунда)
7 SuperMario
 
22.05.18
12:58
Думаю, что reconnect будет правильным, дабы не ломать реестр.
Спс всем за помощь!
8 Дык ё
 
22.05.18
13:01
9 MM
 
22.05.18
13:02
(6) Этот параметр похоже означает совсем другое https://docs.microsoft.com/ru-ru/previous-versions/windows/it-pro/windows-2000-server/cc957548(v=technet.10) . Он и так раз в секунду поддерживает соединение пустым пакетом.
Похоже сервер к которому подключаешься сам рвёт соединение по своим причинам, так что в (7) выход правильный.