|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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
|
|||
|
|||
Ну дык у мануале не этому API должны быть примеры и описание. Далее смотрим что надо посылать и что ждать в ответ. Думаю, TIdTCPClient вполне подойдет. В свое время писал такую штуку для скачивания статистики с офисной АТС у которой тоже использовался свой протокол. Там был какой то баг, пришлось первую команду посылать 2 раза, на первый они нифига не отвечала. Может тут что-то такое же.
Ну и не забыть проверить файервол, может просто он блокирует твои попытки. |
#3
|
|||
|
|||
Да, в мануале есть что посылать и я это посылаю(все реализовано 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
|
|||
|
|||
Проверил как идут пакет в моем клиенте и в клиенте разработчика.
как я заметил то правильно будет посылать все в таком формате Код:
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
|
|||
|
|||
Тему можно закрыть решил все
Код:
Memo1.Lines.Add(IdTCPClient1.Socket.AllData); |