Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.08.2017, 14:36
AntiMag1991 AntiMag1991 вне форума
Прохожий
 
Регистрация: 27.12.2012
Сообщения: 14
Репутация: 10
Печаль Raw TCP/IP I need big help!

Есть сервер и клиент уже сделанный. У клиента есть маленький api мануал и там написано Uses raw TCP/IP connections (not HTTP) for remote management and statistics.
Начал искать и совсем запутался что мне необходимо использовать Raw TCP/IP или TCP/IP и каким функционалом можно реализовать данное подключение (пробовал IdTCPClient1 и SocketConnection1 не получилось.Или я делаю что то не так или оно не предназначено дня такого )
Подскажите чем реализовать подключение, что почитать. Ну или если есть сторонний что скачать.
  #2  
Старый 02.08.2017, 18:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну дык у мануале не этому API должны быть примеры и описание. Далее смотрим что надо посылать и что ждать в ответ. Думаю, TIdTCPClient вполне подойдет. В свое время писал такую штуку для скачивания статистики с офисной АТС у которой тоже использовался свой протокол. Там был какой то баг, пришлось первую команду посылать 2 раза, на первый они нифига не отвечала. Может тут что-то такое же.
Ну и не забыть проверить файервол, может просто он блокирует твои попытки.
  #3  
Старый 03.08.2017, 09:51
AntiMag1991 AntiMag1991 вне форума
Прохожий
 
Регистрация: 27.12.2012
Сообщения: 14
Репутация: 10
По умолчанию

Да, в мануале есть что посылать и я это посылаю(все реализовано JSON форматом) но после делаю считать данные и меня выбивает ошибка.

Запрос и вывод идут таким методом:
Код:
----------------
REQUEST:
{"id":0,"jsonrpc":"2.0","method":"miner_getstat1"}

RESPONSE:
{"result": .......}


COMMENTS:
Gets current statistics.

То-есть строка с REQUEST отправляется а на ответе зависание.Даже если я на ответе ставлю ReadLn('RESPONSE');

Код:
var
datat : string;
js:string;
begin
    IdTCPClient1.Disconnect;
    IdTCPClient1.Host:='192.168.20.175';
    IdTCPClient1.Port:=3333;
    js:='REQUEST:{"id":0,"jsonrpc":"2.0","method":"miner_getstat1"}';
    IdTCPClient1.Connect;
    IdTCPClient1.Socket.Open;
    idTcpClient1.Socket.WriteLn(js);
    memo1.Lines.Add('JSON отправлен');
    datat:=   (IdTCPClient1.Socket.ReadLn);              // - тут происходит зависание
    Memo1.lines.Add(IdTCPClient1.Socket.ReadLn);    // - тут происходит зависание
    IdTCPClient1.Socket.Close;

Просто наглухо зависает. Если поменять значение в js='{"id":0,"jsonrpc":"2.0","method":"miner_getsta t1"}' то тогда выпадает ошибка Connecntion Closed GraceFulls

Фаерволы выключены. Ведь при запуски того же клиента которы предлагает разработчик все работает.

Последний раз редактировалось AntiMag1991, 03.08.2017 в 15:16.
  #4  
Старый 03.08.2017, 16:39
AntiMag1991 AntiMag1991 вне форума
Прохожий
 
Регистрация: 27.12.2012
Сообщения: 14
Репутация: 10
По умолчанию

Проверил как идут пакет в моем клиенте и в клиенте разработчика.

как я заметил то правильно будет посылать все в таком формате

Код:
procedure TMainForm1.Button4Click(Sender: TObject);
var
  datat: string;
  js: string;
begin
  IdTCPClient1.Disconnect;
  IdTCPClient1.Host := '192.168.20.175';
  IdTCPClient1.Port := 3333;
  IdTCPClient1.Connect;
  IdTCPClient1.Socket.Open;
  js:='{"id":0,"jsonrpc":"2.0","method":"miner_getstat1"}';
  IdTCPClient1.Socket.WriteLn(js);      // <------(1)
  Memo1.Lines.Add('JSON отправлен');
  Memo1.Lines.Add(IdTCPClient1.Socket.ReadLn);
end;

Но при отладке сервер толи закрывает соединение или еще какая то ошибка получается на этапе (1). Пакет от сервера отправляется но когда доходит дело до считывания выдает ошибку Connecntion Closed Gracefulls.
При этом сервер отправил данные но почему все так происходит пока понять не могу.
  #5  
Старый 03.08.2017, 17:39
AntiMag1991 AntiMag1991 вне форума
Прохожий
 
Регистрация: 27.12.2012
Сообщения: 14
Репутация: 10
По умолчанию

Тему можно закрыть решил все
Код:
Memo1.Lines.Add(IdTCPClient1.Socket.AllData);
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter