Внешняя компонента TcpClient

0. Техподдержка 04.06.20 11:44
Асинхронный обмен данными по протоколу TCP. Поддержка IPv4/IPv6, SSL

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Nastyok_Kur 08.06.20 08:08 Сейчас в теме
Добрый день! Очень полезная разработка!!!
Пытаюсь использовать демо-версию. Объект успешно создается, но никаких внешних событий не возникает.... Есть какие-то нюансы работы компоненты?

Создаю объект следующим образом:

Результат = ПодключитьВнешнююКомпоненту(АдресМакета, "TcpClient", ТипВнешнейКомпоненты.Native);
Комп = Новый("AddIn.TcpClient.TcpClient");
Комп.Open(l_RHost, Число(l_RPort));
2. Техподдержка 08.06.20 08:17
Добрый день.
Есть нюанс: объект компоненты нужно сохранить (в переменной модуля формы или в переменной модуля приложения), иначе при выходе из процедуры он уничтожится и внешних событий не будет. Пример модуля формы:

Перем Компонента;  //здесь сохраняем объект компоненты

Процедура ПриОткрытии()
	Если ПодключитьВнешнююКомпоненту("TCPClient32.dll", "TCP6", ТипВнешнейКомпоненты.Native) Тогда
		Компонента = Новый("AddIn.TCP6.TcpClient");
	КонецЕсли;

	Если Компонента=Неопределено Тогда
		Сообщить("Ошибка подключения компоненты!");
		Возврат;
	КонецЕсли;
	
КонецПроцедуры


Процедура ВнешнееСобытие(Источник, Событие, Данные)
	Сообщить("Внешнее событие   Источник="+Источник+"  Событие="+Событие+"  Данные="+Данные);
КонецПроцедуры

Процедура КнопкаOpenНажатие(Элемент)
	Компонента.Open("127.0.0.1",8001,Ложь);
КонецПроцедуры

Процедура КнопкаWriteНажатие(Элемент)
	ДвоичныеДанные = Новый ДвоичныеДанные("d:\Addin\TCPClient\write.txt");
	Компонента.Write(ДвоичныеДанные);
КонецПроцедуры

Процедура КнопкаReadНажатие(Элемент)
	ДвоичныеДанные  = Компонента.Read();
	ДвоичныеДанные.Записать("d:\Addin\TCPClient\read.txt");
КонецПроцедуры

Процедура КнопкаCloseНажатие(Элемент)
	Компонента.Close();
КонецПроцедуры
Показать
3. Nastyok_Kur 18.06.20 07:55 Сейчас в теме
Спасибо! Получилось!
Но почему-то сразу после получения события "Open", получаю событие "Write", хотя метод Write не вызываю. Это нормально?

Еще поясните, пожалуйста, что означает, что "Метод [Read] следует вызывать после получения события "Read"." Данное событие должно возникнуть до того, как вызываю метод Read?
4. Техподдержка 18.06.20 08:08
(3)
1. Событие "Write" говорит о том, tcp-сервер готов к приёму данных, т.е. можно отправить данные методом Write().

2. Событие "Read" говорит о том, что от tcp-сервера пришли новые данные и их можно считать методом Read().

3. Сразу после получения события "Open", возникает "Write" - это абсолютно нормально, т.е. открыто соединение и сервер готов к приёму данных.
5. Nastyok_Kur 18.06.20 08:21 Сейчас в теме
Ок! Спасибо за оперативный ответ!)
6. Техподдержка 18.06.20 08:39
(5) В принципе, можно отправлять данные на сервер не дожидаясь события "Write". Эти данные будут помещены в очередь и приняты сервером, когда он будет готов.
7. Nastyok_Kur 29.06.20 09:08 Сейчас в теме
Здравствуйте! Не подскажете еще, пожалуйста
Ранее, используя WinSock (решили уйти от нее, т.к. не адаптирована под х64) для интеграции с весами использовали следующий код "tcpClient.SendData 5", т.е. передавали в порт число 5.
Используя Вашу компоненту, каким образом мне надо передавать данные, чтоб эффект был такой же?
Прикрепленные файлы:
8. Техподдержка 29.06.20 09:21
(7) Добрый день.
В 1С есть ряд низкоуровневых инструментов для работы с двоичными данными, используя которые можно подготовить нужный пакет данных. В вашем случае:

Поток = Новый ПотокВПамяти;
ЗаписьДанных = Новый ЗаписьДанных(Поток);
ЗаписьДанных.ЗаписатьБайт(5);
ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();

Компонента.Write(ДвоичныеДанные);
9. Nastyok_Kur 06.07.20 09:29 Сейчас в теме
Спасибо! то, что требовалось!
Подскажите еще, пожалуйста. Ранее, используя Winsock писали в порт строку, содержащую команды для печати для принтера этикеток (см. фото). Как правильнее, используя Вашу компоненту, отправить в порт то же самое?...
И в частности смущает, как передать VbNullString ?
Заранее спасибо!!!
Прикрепленные файлы:
10. Техподдержка 06.07.20 09:52
(9)
ости смущает, как передать VbNullString ?

Точно также: используйте ЗаписьДанных, метод ЗаписатьСимволы() или ЗаписатьСтроку().
11. Nastyok_Kur 06.07.20 11:21 Сейчас в теме
Какой символ будет интерпретирован, как VbNullString?
12. Техподдержка 06.07.20 11:28
(11) я не специалист по VB. Но похоже, что это пустая строку. Просто используется неявное приведение типов.
13. Mick2iS 295 09.09.20 14:29 Сейчас в теме
Добрый день!
Приобрели эту компоненту в июле.
Уточните, пожалуйста, имеет ли смысл в текущем обновлении, какие изменения?
15. Техподдержка 09.09.20 14:36
(13)Добрый день. Встроили OpenSSL внутрь компоненты.
16. Mick2iS 295 09.09.20 16:29 Сейчас в теме
Оставьте свое сообщение
Вопросы с вознаграждением