Имя: Пароль:
1C
Админ
MSWINSCK на терминальном сервере
0 vorrrobey
 
15.09.13
01:12
Уважаемые коллеги, есть задача, организовать обмен информацией 1С со сторонней службой, для этого был написан простой сервер с возможностью обмена текстовыми сообщениями по TCP/IP. На машинах, где 1С установлена локально, все прекрасно работает через MSWINSCK (v8: Как организовать прослушивание TCP-порта (tcp-server в 1С)?). Сейчас возникла задача добавить функционал юзерам, которые работают с 1С через терминальный сервер. Проблема в том, что MSWINSCK не может установить два соединения с одним и тем же сервером по одному порту (эксперименты с помощью telnet-а показали, что проблема именно в MSWINSCK). Очень интересно, какой сервис она использует, и можно ли "научить" ее работать индивидуально для каждого пользователя? Возможно есть другой способ работать с TCP/IP из 1С, писать свою компоненту лень))
1 oleg_km
 
15.09.13
12:19
Этого не сможет не один компонент, т.к. так задумано в самом протоколе TCP, что на одном компьютере только один сокет может слушать конкретный порт. Иначе как определить, в какой программе сокет должен получить данные. Правильной стратегией является либо наличие только одного сервера на хосте, слушающего данный порт, либо если нужно запустить много серверов им назначаются динамические порты, которые клиент может запросить например из какой-либо таблички в 1С или от диспетчера.
2 vorrrobey
 
15.09.13
12:47
Клиент написанный на Delphi, прекрасно работает параллельно с 1С, два клиента запущенный через telnet, так же прекрасно работают. Протокол здесь не причем.
3 vorrrobey
 
15.09.13
12:47
*ни
4 oleg_km
 
15.09.13
13:06
Аааа клиент? Ну так не назначай LocalPort перед Connect и Windows само присвоит из диапазона динамических портов
5 BigHarry
 
15.09.13
15:30
Зачем для обмена данными изобретать такие сложные велосипеды с квадратными колесами, да еще TCP-сервер пихать в и без того кривую 1С-ину?
6 Torquader
 
15.09.13
15:47
Скажем так, вы подключаетесь на один и тот же адрес и один и тот же порт с разных мест.
При этом, указывать клиентский порт для соединения не нужно - его система выбирает автоматически.
А если кто-то указал конкретный порт для исходящего соединения (что на самом деле не противоречит TCP), то два экземпляра одного приложения одновременно работать не смогут.
P.S. у меня в одном приложении несколько экземпляров WinSock прекрасно работали.
7 Torquader
 
15.09.13
15:50
(5) В данном случае, велосипед с обычными круглыми колёсами, но на нём пытаются ехать, не сняв блокировочный замок.
8 vorrrobey
 
15.09.13
19:08
(4) Спасибо, помогло
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс