Имя: Пароль:
1C
 
Компонента 1С для работы с Сокетами и TCP/IP
0 Air777
 
25.08.05
20:02
Господа возникла необходимость заливать данные из внешнего сервера
в базу 1С. Сервер работает по экзотическому протоколу на базе TCP/IP
(протокол наподобие POP3 открытый текстовый) Обыскался по всевозможным форумам и ресурам компоненту,
которая бы могла создавать полноценного асинхронного клиента
TCP/IP. Чтобы можно было отправлять сообщение и при получении
каких либо данных с сервера также выполнялась некая процедура
для обработки полученных данных. Всё что было найдено либо было глючевно, либо не давало полную свободу действий (произвольный порт, и без промежуточных протоколов с никами и прочей лабудой)с TCP/IP как это можно делать например в телнетовской утилите от М$.
Помогите кто чем может.
Заранее спасибо.
1 Волшебник
 
модератор
25.08.05
20:45
Почему бы не использовать telnet? Ему можно подложить текстовый файл.
2 Орк
 
25.08.05
21:22
А winsock не катит?
3 smaharbA
 
25.08.05
21:42
use Socket;
//$forminfo = 'ПАРАМЕТРЫ_ДЛЯ_ФАЙЛА_С_КОТОРОГО_ЧТОТО_ПОЛУЧАЕМ'; #Это если надо
$proto = getprotobyname('tcp');
socket(Socket_Handle, PF_INET, SOCK_STREAM, $proto);
$port = ПОРТ_ХОСТА;
$host = "АДРЕС_НОСТА";
$sin = sockaddr_in($port,inet_aton($host));
connect(Socket_Handle,$sin) || die ("Cannot connect");
send Socket_Handle,"GET ЗДЕСЬ_ПУТЬ_К_ФАЙЛУ$forminfo HTTP/1.0\n",0;
# ПЕРЕДАЕМ ЗАГОЛОВОК ЕСЛИ НАДО
send Socket_Handle,"User-Agent: my agent\n",0;
send Socket_Handle,"SomeHeader: my header\n",0;
send Socket_Handle,"\n",0;

# читаем из дескриптора сокета также как из файла.
while ()
{
print $_; #печатаем или можно передать в переменную
}
close (Socket_Handle);
4 Air777
 
26.08.05
09:19
То: Орк,smaharbA
Как соединиться из не 1С я в курсе.
Меня интересует соединение именно из самой 1С,
т.е. из внешней компоненты, если таковая имеется готовая,
или пример как её создать (желательно на Delphi6)
5 GrayT
 
26.08.05
09:27
Вроде видел на проклабе - сам не юзал.
Можно попробовать заюзать АктивХ от мелкомягких
6 SnarkHunter
 
26.08.05
09:42
NetaInet.dll
7 Air777
 
26.08.05
09:43
То:  GrayT
Какраз на проклабе и были найдены и протестированы все компоненты.
Ниодна не дает желаемого.

Какие именно ActveX хавает 1С? Может ссылки какие есть?
8 SnarkHunter
 
26.08.05
09:43
9 MMF
 
26.08.05
10:00
(7) напиши сам... фигли там писать, когда есть Indy...
10 Air777
 
26.08.05
10:03
To SnarkHunter
Отличная компонента, меня бы полность устроила
если бы она соединенеие не закрывала после получения ответа с
сервера. Т.е. она синхронная запрос-ответ. И не предусматривает
обработку получаемых данных с сервера без запроса.

То MMF: Пожалуйто пример, или ссылку на ресурс как делать в Dlephi6
11 MMF
 
26.08.05
10:16
(10) сырцы не вышлю... заказчик не поймет. В объекте компоненты создаешь обработчики событий TClientSocket/TserverSocket (поскольку Д6) типа
   procedure OnConnect (Sender: TObject; Socket: TCustomWinSocket);
   procedure OnSocketRead (Sender: TObject; Socket: TCustomWinSocket);
   procedure OnSocketError(Sender: TObject; Socket: TCustomWinSocket;
                           ErrorEvent: TErrorEvent; var ErrorCode: Integer);
создаешь сокеты и назначаешь свойства.
   FNetClient := TClientSocket.Create(nil);
   FNetClient.ClientType:=ctNonBlocking;
   FNetClient.Address:=FNetInfo.IP;
   FNetClient.Port:=FNetInfo.Port;
   FNetClient.OnDisconnect:=OnDisconnect;
   FNetClient.OnConnect:= OnConnect;
   FNetClient.OnRead:= OnSocketRead;
ты сказал, что знаешь как работать с сокетами... работай :-) Никакой разницы с обычным использованием компонентов.
12 Air777
 
26.08.05
10:20
То: MMF
У меня сложность все это упаковать во внешнюю компоненту так
чтобы передавалось событие в 1С о получении сообщения например.
Писал TCP/IP приложения но с dll и теб более заточенные под 1С компоненты
не писал.
13 Темнота
 
26.08.05
10:26
Могу выслать примеры из "Технологии создания внешних компонент"
А что мешает использовать 1С как OLE сервер?
14 Air777
 
26.08.05
10:32
То: Темнота

Пожалуйсто пришли на air777@mail.ru
Спасибо
15 Темнота
 
26.08.05
10:46
вечером пошукаю на домашнем компе и вышлю.
Независимо от того, куда вы едете — это в гору и против ветра!