Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Lazarus(Linux) idHTTPServer Already in use #98 (https://www.delphipraxis.net/178054-lazarus-linux-idhttpserver-already-use-98-a.html)

Cyberaxx 14. Dez 2013 13:18

Lazarus(Linux) idHTTPServer Already in use #98
 
Hallo liebe Gemeinde,

aktuell versuche ich mittels Lazarus unter Linux den idHTTPServer in betrieb zu nehmen und scheitere mit der Meldung
Zitat:

EIdSocketError: Socket Error # 98
Address already in use.
Es ist dabei egal welchen Post ich benutze es ist immer die selbe Meldung.

Was kann hier die Ursache sein?
Sollte es etwas geben was von der Art her genau so einfach ist, ich natürlich auch dies versuchen.

Gefunden habe ich im Internet nichts zutreffendes und hier im Forum nur einen Thread mit der Antwort gleich etwas anderes als Indy zu nutzen. Ich würde aber gerne bei Indy bleiben. Der Quelltext ist hier recht schmal um den HTTPServer rum (ca 10 Zeilen). Ich muss nur die Parameter über die URL auslesen und an die RS232 Schnittstelle weiterreichen. Der Aufruf schaut Beispielsweise so aus:
Gelesen werden die drei Paramter und als Rückgabe ein einfacher String gesendet als Erfolgsmeldung.

Delphi-Quellcode:
constructor TMyApplication.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
 
  idHTTPServer1 := TIdHTTPServer.Create(nil);
  idHTTPServer1.DefaultPort := 65000;
  idHTTPServer1.OnCommandGet := idHTTPServer1CommandGet;
  idHTTPServer1.Active := True;
end;

procedure TMyApplication.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  if ARequestInfo.Document = '/' then
  begin
    Writeln(ARequestInfo.Params.Text);
    AResponseInfo.ContentText := DateTimeToStr(Now);
  end;
end;

mjustin 14. Dez 2013 21:29

AW: Lazarus(Linux) idHTTPServer Already in use #98
 
Ist es eine ältere Indy Version? (Aktuell ist Indy 10.6)

Ich verwende zur Konfiguration (für Indy 10.6, Delphi und Free Pascal) diesen Code, bei dem die Bindings-Property geleert und ein neues Binding angelegt wird:

Delphi-Quellcode:
var
  Binding: TIdSocketHandle;
begin
...
  HTTPServer.Bindings.Clear;

  Binding := HTTPServer.Bindings.Add;
  Binding.IP := Host;
  Binding.Port := Port;
...

Cyberaxx 15. Dez 2013 11:29

AW: Lazarus(Linux) idHTTPServer Already in use #98
 
Hallo und danke für die Antwort.
Es sollte das aktuelle Indy sein. ich wollte gerade schreiben das ich es nun auch habe. Man sollte sich einmal die Demos ansehen bevor man Googelt...

Nachdem ich etwas Zeit damit verbracht hatte die Demo ans laufen zu bekommen habe ich mir das mal angesehen und deine Lösung ist auch die in der Demo.
Allerdings verstehe ich das Bindung auf den Host nicht... Es soll ja von jedem Host aus möglich sein. Diese Einstellung habe ich dann einfach weg gelassen und es läuft :) Ansonsten hätte dieser Post von dir spätestens jetzt die Lösung gebracht.

Nur warum ist das unter Linux so kompliziert? Windows interessiert dies nicht zusätzlich...

mjustin 15. Dez 2013 14:28

AW: Lazarus(Linux) idHTTPServer Already in use #98
 
Zitat:

Zitat von Cyberaxx (Beitrag 1239829)
Allerdings verstehe ich das Bindung auf den Host nicht... Es soll ja von jedem Host aus möglich sein. Diese Einstellung habe ich dann einfach weg gelassen und es läuft :) Ansonsten hätte dieser Post von dir spätestens jetzt die Lösung gebracht.

Das Zuweisen der Host Property kann man natürlich weglassen, wenn das bei Bindings.Add von Indy erzeugte neue Binding schon den "richtigen" Host (genauer gesagt: Netzwerkadapter) angibt. Oder 0.0.0.0 verwenden für alle Netzwerkadapter.

Zitat:

Zitat von Cyberaxx (Beitrag 1239829)
Nur warum ist das unter Linux so kompliziert? Windows interessiert dies nicht zusätzlich...

Worauf bezieht sich "das" und "dies"? :gruebel:

Cyberaxx 16. Dez 2013 06:30

AW: Lazarus(Linux) idHTTPServer Already in use #98
 
Guten Morgen,

Zitat:

Zitat von mjustin (Beitrag 1239854)
Worauf bezieht sich "das" und "dies"? :gruebel:

Unter Windows DefaultPort und starten, läuft. Unter Linux Socket Error #98


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz