подключение через inet-компоненты/строка адреса

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

подключение через inet-компоненты/строка адреса

Сообщение helga » 22.07.2016 16:11:54

Всем доброе время!.
такой вопрос: клиент-серверная часть приложения, к серверу подключаюсь через LTCPComponent, соединение проходит нормально и пакеты бегают в оба направления, но только если указан порт (например 8080) и адрес (например 129.46.48.142) . Если же серверная часть лежит в каталоге то все-облом!
( если смотреть в браузере то строка выглядит таким образом http: //129.46.48.142:8080/wpkr/server4.php (пробел поставил что б не было гп/ссылки) )
Подскажите пожалуйста как добавить путь?
Заранее спасибо.
ps. с английским не очень, но https://lnet.wordpress.com/usage/usage-guide/ вдуплял сколько мог... может кто на русском даст ссылки?
helga
новенький
 
Сообщения: 14
Зарегистрирован: 26.05.2016 20:51:06

Re: подключение через inet-компоненты/строка адреса

Сообщение tema » 22.07.2016 21:19:32

По вопросу в личке я ничего нового сказать не могу. Там viewtopic.php?f=5&t=10806 почти всё что я сделал по http было указано. Могу только весь текст из файла выложить.
Вот что у меня было по http:
Код: Выделить всё
unit admain;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, lhttp, lHTTPUtil, lNet, FileUtil, Forms, Controls,
  Graphics, Dialogs, StdCtrls, LCLIntf;

type
  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    ms: TStream;
    done:boolean;
    function ClientInput(ASocket: TLHTTPClientSocket; ABuffer: pchar; ASize: integer): integer;
    procedure ClientDisconnect(ASocket: TLSocket);
    procedure ClientDoneInput(ASocket: TLHTTPClientSocket);
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

function TForm1.ClientInput(ASocket: TLHTTPClientSocket; ABuffer: pchar; ASize: integer): integer;
begin
  ShowMessage(ABuffer);
  memo1.Text:=ABuffer;
  ms.Write(aBuffer[0], aSize);
end;

procedure TForm1.ClientDisconnect(ASocket: TLSocket);
begin
  //DebugLn('Disconnected.');
  done := true;
end;

procedure TForm1.ClientDoneInput(ASocket: TLHTTPClientSocket);
begin
  //DebugLn('done.');
  ASocket.Disconnect;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  httpclient: TLHTTPClient;
  sHost, sUrl: string;
  sPort: word;
begin
  try
    ms := TMemoryStream.Create;
    httpclient := TLHTTPClient.Create(nil);
    httpclient.OnDisconnect := @ClientDisconnect;
    httpclient.OnDoneInput := @ClientDoneInput;
    httpclient.OnInput := @ClientInput;
    DecomposeURL('http://solvpro.ru/index.php', sHost, sUrl, sPort);
    showmessage(inttostr(sPort));
    httpclient.Method := hmPost;
    httpclient.Port := sPort;
    httpclient.Host := sHost;
    httpclient.URI := sUrl;
    httpclient.AddExtraHeader('Keep-Alive: 300');
    httpclient.AddExtraHeader('Connection: keep-alive');
    //httpclient.AddExtraHeader('Content-Length: 111'); // <-XML length
    httpclient.AddExtraHeader('Content-Type: text/xml');
    httpclient.AddExtraHeader(LineEnding);
    httpclient.AddExtraHeader(
      '<service.request>' + LineEnding +
      '<sign>SIGN</sign>' + LineEnding + '</service.request>'
      );
    httpclient.SendRequest;
    Done := false;

    while not Done do
      HttpClient.CallAction;
    //memo1.Lines.LoadFromStream(ms);
  finally
    httpclient.Free;
    ms.Free;
  end;
end;

end.
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: подключение через inet-компоненты/строка адреса

Сообщение helga » 22.07.2016 21:59:08

странно, я пробовал практически также (да не совсем!)- у меня с сервера ответ не идет. правда я передаю xml и получаю xml.
Скажите, а сам компонент с палитры вы не брали, так получается?

Добавлено спустя 1 час 53 минуты 28 секунд:
кстати, интересный вопрос: а как сменить порт на 8080 ?
helga
новенький
 
Сообщения: 14
Зарегистрирован: 26.05.2016 20:51:06

Re: подключение через inet-компоненты/строка адреса

Сообщение Vadim » 23.07.2016 13:57:05

helga
Используйте компонент TLHTTPClientComponent, как Вам подсказал предыдущий товарищ. Там можно указать и хост и порт и то, что после хоста идёт, то что Вы зовёте каталогом. Например для URL=http://www.freepascal.ru:8080/forum/viewtopic.php
Код: Выделить всё
LHTTPClientComponen1.Host:='www.freepascal.ru';
LHTTPClientComponen1.Port:=8080;
LHTTPClientComponen1.URI:='/forum/viewtopic.php';
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru