![]() |
![]() |
![]() |
|
TCP Soсket из 1С Злопчинский, Вадим33, Has, Fish, mikecool, arsik, Gsof, Затейник, Asmody, denk32, phabeZ, T32, novichok79, H A D G E H O G s, San787, Рамиль Маугли, trad, stix2010, АНДР, ldo6, alexxx961503, formista2000, GenAcid, lEvGl, Il19, Кир Пластелинин, 2mugik, Djelf, Smit1C, LLeonidov, Franchiser, nvm220380, X Leshiy, LienXo
| ☑ | ||
---|---|---|---|---|
0
Gsof
24.07.25
✎
13:08
|
Добрый день, не подскажите где можно посмотреть пример кода как работать из 1с с TCP Soсket (не путать с WebSocket)
|
|||
1
arsik
гуру
24.07.25
✎
13:22
|
||||
2
craxx
24.07.25
✎
13:22
|
(0) кроме как через ВК - никак.
|
|||
3
Asmody
24.07.25
✎
13:23
|
Платформа не поддерживает работу с TCP socket.
Искать внешнюю компоненту, которая умеют. Или написать самому |
|||
4
craxx
24.07.25
✎
13:25
|
(3) А еще лучше написать внешний сервис (хоть на чем, хоть на том же питоне) - и обмениваться штатно по http-сервису.
|
|||
5
Dzenn
гуру
24.07.25
✎
16:28
|
я развернул на апаче локальный адрес и обращался к нему из 1С по хттп. А там, моё обращение подхватывал пхп, и содержимое тела запроса отправлял уже через сокет:
<?php if($_SERVER['REQUEST_METHOD'] == 'GET') { include 'help.html'; } if($_SERVER['REQUEST_METHOD'] == 'POST') { $entityBody = file_get_contents('php://input'); $fp = fsockopen("192.168.1.89", 9100, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { fwrite($fp, $entityBody); fclose($fp); // To close the connection } } ?> а вообще, задачу вида "напиши на пхп код отправки хттп запроса через сокет" тебе сейчас любой ии решит: https://chat.qwen.ai/s/dacf4709-2164-403f-a722-02a9d23f6039?fev=0.0.166 |
|||
6
Dzenn
гуру
24.07.25
✎
16:30
|
а вот содержимое help.html:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Сервер печати</title> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body> <h1> PHP-скрипт для печати на принтеры Zebra </h1> <div class="info"> <p> Привет, это php-скрипт, посредством которого из 1С происходит печать на складские принтеры Zebra. Я нужен потому, что 1С-ка не умеет отправлять запросы на сокеты, но умеет отправлять HTTP-запросы. Та справка, которую ты сейчас видишь, выдаётся при методе GET. Для отправки на печать необходимо использовать метод POST, а также приложить ZPL-команду в тело запроса и IP-адрес принтера в заголовок 'Zebra' запроса. Удачки тебе. Закиров Дамир, май 2024, <a href="https://t.me/zakirovdamir">t.me/zakirovdamir</a></p> </div> </body> </html> |
|||
7
Asmody
24.07.25
✎
16:30
|
(5) неспортивно.
Пусть ИИ ВК напишет. На rust'е |
|||
8
Dzenn
гуру
24.07.25
✎
16:33
|
(8) тогда уж пусть напишет новый бинарник 1С, поддерживающий сокеты 😎
|
|||
9
Il19
25.07.25
✎
04:02
|
Прокладку тру ванэсник должен так: https://oscript.io/syntax/TCPConnection
|
|||
10
Gsof
25.07.25
✎
14:13
|
всем спасибо за участите , если кому интересно
то вот пример кода (необходимо установить Winsock) // Создаем COM-объект Winsock Сокет = Новый COMОбъект("MSWinsock.Winsock"); // Настраиваем параметры подключения УдаленныйХост = "192.168.1.1"; // IP или доменное имя сервера УдаленныйПорт = 5000; // Порт сервера Попытка // Устанавливаем параметры подключения Сокет.RemoteHost = УдаленныйХост; Сокет.RemotePort = УдаленныйПорт; // Подключаемся к серверу Сокет.Connect(); // Ждем завершения подключения (асинхронный режим) Пока Сокет.State = 6 Цикл // sckConnecting Ожидание(1); // Пауза 100 мс КонецЦикла; // Проверяем статус подключения Если Сокет.State = 7 Тогда // sckConnected Сообщить("Подключение успешно!"); // Отправляем данные на сервер ДанныеДляОтправки = "привет мир"; Сокет.SendData(ДанныеДляОтправки); Сообщить("Отправлено: " + ДанныеДляОтправки); // Ждем ответа (можно использовать событие DataArrival, но в 1С проще поллинг) Пока НЕ Сокет.BytesReceived > 0 Цикл Ожидание(1); // Даем серверу время на ответ КонецЦикла; // Проверяем, есть ли данные в буфере Если Сокет.BytesReceived > 0 Тогда ПринятыеДанные = ""; Сокет.GetData(ПринятыеДанные); Сообщить("Получено от сервера: " + ПринятыеДанные) Иначе Сообщить("Сервер не ответил."); КонецЕсли; ИначеЕсли Сокет.State = 9 Тогда // sckError ОшибкаТекста = Сокет.Error; Сообщить("Ошибка подключения: " + ОшибкаТекста); Иначе Сообщить("Неизвестный статус: " + Сокет.State); КонецЕсли; Исключение Сообщить("Ошибка: " + ОписаниеОшибки()); КонецПопытки; // Закрываем соединение Сокет.Close(); |
|||
11
Злопчинский
25.07.25
✎
17:58
|
(10) И как это будет работать под линуксом?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |