Имя: Пароль:
1C
1С v8
MSWinsock.Winsock и Telnet
,
0 wmonref
 
25.08.19
16:49
Приветствую!
Пытаюсь подключиться из 1С через Telnet к автомобильным весам и прочитать данные с этих весов.
(Через Putty подключаюсь по Telnet-у и все работает нормально)

Код:

    Попытка
        WinSocket = Новый COMОбъект("MSWinsock.Winsock");    
    Исключение
        Сообщить("Ошибка создания объекта Winsock. " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
        Адрес = "192.168.0.99";
        Порт = 1223;

    WinSocket.RemoteHost = Адрес;
    WinSocket.RemotePort = Порт;
    
    WinSocket.Connect();

        WinSocket.GetData(ДатаСрв);

{ВнешняяОбработка.ПереносОпераций.Форма.Форма.Форма(83)}: Ошибка при вызове метода контекста (GetData)
    WinSocket.GetData(ДатаСрв);
по причине:
Произошла исключительная ситуация (Winsock): Wrong protocol or connection state for the requested transaction or request


Все проходит успешно до WinSocket.GetData(ДатаСрв). В чем может быть проблема??
1 Garikk
 
25.08.19
18:42
(0) Чую что protocol сокету не установили
2 Garikk
 
25.08.19
18:43
вроде как WinSocket.Protocol=0 перед WinSocket.Connect()
3 Сияющий в темноте
 
25.08.19
22:16
он асинхронный,после того,как дали Connect,нужно ждать,когда придет событип подключения,и это,1с его ловить не умеет.
с приемом данных также-событие получения данных и в нем пришедшие данные.
4 Сияющий в темноте
 
25.08.19
22:16
telnet умеет в файл и из файла,так что проще через него.
5 wmonref
 
26.08.19
11:34
(2) Сделал как посоветовали - ошибка все равно выскакивает...

(4) Поподробней можно объяснить пожалуйста?
6 wmonref
 
26.08.19
19:15
Кто-нибудь?
7 wmonref
 
26.08.19
20:03
Решил!
Обработчик ожидания надо использвать...

Процедура КнопкаВыполнитьНажатие(Кнопка)

    Попытка
        WinSocket = Новый COMОбъект("MSWinsock.Winsock");    
    Исключение
        Сообщить("Ошибка создания объекта Winsock. " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
        Адрес = "192.168.0.99";
        Порт = 1223;

    WinSocket.RemoteHost = Адрес;
    WinSocket.RemotePort = Порт;
    
    WinSocket.Connect();
    ПодключитьОбработчикОжидания("ПолучитьДанные", 1);

КонецПроцедуры


Процедура ПолучитьДанные()
    
    
    ОтключитьОбработчикОжидания("ОправитьДанныеПриСоединении");
    State = WinSocket.State;
    Если State = 6 Тогда
        ПодключитьОбработчикОжидания("ОправитьДанныеПриСоединении", 1);
    ИначеЕсли State = 7 Тогда
        WinSocket.GetData(ТекстСообщения);
    Иначе
        Сообщить(State);
    КонецЕсли;
    
КонецПроцедуры
8 wmonref
 
26.08.19
20:05
П.С.

Надо заменить "ОправитьДанныеПриСоединении" на "ПолучитьДанные"
9 duhsi
 
18.10.19
08:08
Доброго времени суток!
столкнулся с подобной задачей, получить данные с крановых весов. Весы подключены через WiFi . по IP и Port Коннект проходит, статус 7, а вот когда дело доходит до функции GetData() то тут тупик, ни каких данных с весов не приходит.
подскажите пожалуйста, какие-то параметры нужно передавать в этой функции или как это вообще работает?
10 duhsi
 
22.10.19
13:22
(8) wmonref подскажите вы передавали какие-то параметры?
11 oleg_km
 
22.10.19
15:52
http://catalog.mista.ru/public/119982/

DataArrival - возникает при поступлении данных.
Процедура WinSocketDataArrival(Элемент, bytesTotal)

Т.е. два параметра.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший