Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Client - Server Kommunikation(Sockets) umstellen auf Linux (https://www.delphipraxis.net/136675-client-server-kommunikation-sockets-umstellen-auf-linux.html)

Cyberaxx 5. Jul 2009 22:49


Client - Server Kommunikation(Sockets) umstellen auf Linux
 
Hallo Delphi Gemeinde

Ich habe vor einiger Zeit mal eine Client - Server Kommunikation umgesetzt mittels den Delphi Sockets.
Das funktioniert auch wunderbar und ist schon seit geraumer Zeit in mehreren Programen umgesetzt.
Es dient nicht nur zum Austausch von Nachrichten zum Chatten sondern auch Steuerbefehle für andere
Programmteile.
Jetzt möchte ich gerade den Server umstellen von Windows auf Linux und suche dafür Sockets oder Socket alternativen.
Zudem sollte auch SLL gleich mit umgesetzt werden.

Als Entwicklungsumgebung für Linux nutze ich Lazarus.

Ich hatte da zuerst an die Indy's gedacht(TIdTCPServer/TIdTCPClient), da diese auch SLL umtestützen.
Dafür müsste ich aber das gesamte Programm umbauen, da es eben vollständig auf Sockets bassiert.
Unter Lazarus habe ich auch Sockets gefunden aber es macht den Anschein das dort nur ein Socket Client exsistiert
aber für Linux brauch ich eben den Server.

Habe dann einmal eine Testanwendung unter Windows programmiert die jeweils einen IdTCPServer und Client verwendet.
Nach erstem Test funktionierte dies auch. Sobald ich aber die jeweiligen IOHandler hinzufüge bleibt die Client
Anwendung immer nach dem Verbinden zum Server stehen, ohne eine Fehlermedung oder Timeout. Rein gar nichts...
Habe bisher auch nichts passendes gefunden :(

Woran könnte dies liegen?

Gibt es vllt auch eine Socket Alternative zu den Indy's die auf Windows und Linux laufen, so das ich nicht die
ganzen Units umschreiben und anpassen müsste?
Wäre es möglich sogar die Sockets in Lazarus zu nutzen mittels Delphi Projekt Importieren?

Gruß

Cyberaxx aka Daniel

sx2008 6. Jul 2009 03:14

Re: Client - Server Kommunikation(Sockets) umstellen auf Lin
 
Zitat:

Zitat von Cyberaxx
Zudem sollte auch SLL gleich mit umgesetzt werden.

:gruebel:
Du meinst wohl SSL=Secure Sockets Layer ?
Also grundsätzlich geht sowohl unter Windows als auch unter Linux die Netzwerkkommunikation immer über Sockets.
Das Konzept der Sockets wurde unter Berkeley UNIX (BSD) erfunden und von MS-DOS und Windows übernommen (und erweitert).
Eigentlich müsste sich die Unit ScktComp mit wenigen kleinen Änderungen auch unter Lazarus kompilieren lassen.
Die Namen & Parameter der Funktionsaufrufe sind (fast) gleich.
In Delphi 2007 gibt es die Unit Sockets, die über bedingte kompilierung mit beiden Betriebssystemen umgehen kann.

Cyberaxx 6. Jul 2009 10:37

Re: Client - Server Kommunikation(Sockets) umstellen auf Lin
 
Das Klingt schonmal sehr gut, muss ich nachher mal unter Lazarus ausprobieren.

Was dann noch fehlt, wenn dies klappt ist die Unterstützung von OpenSSL.
Ja meinte Secure Sockets Layer damit. :)

Wenn, wären denn die Indy's eigentlich recht gut geeignet als Alternative zu den Sockets wenn das jemand funktionieren würde?
Wo bestehen die Unterschiede?

Cyberaxx 7. Jul 2009 23:25

Re: Client - Server Kommunikation(Sockets) umstellen auf Lin
 
Bin noch nicht dazu gekommen es auszuprobieren ob es sich portieren lässt.

Wenn ich das hinbekommen sollte, bleibt noch die Frage offen, wie ich mit den normalen Sockets eine SSL Verbindung aufbauen kann,
dazu habe ich bisher nichts gefunden.

Ich tendiere dann doch eher zu den Indy's, die haben SLL Unterstützung und wenn man sie jweils in einem eigenen Thread laufen lässt,
stört es auch nicht weiter das es blocked Sockets im Hintergrund sind.

Bleibt nur die Frage offen, warum hängt sich der Client auf wenn ich mich mittels SSL auf den Server verbinde, denn ohne SSLIOHandler
funktioniert das gane ja.

Hat dahin gegen jemand einen Lösungsansatz?

Gruß

Cyberaxx aka Daniel

Cyberaxx 9. Jul 2009 07:17

Re: Client - Server Kommunikation(Sockets) umstellen auf Lin
 
Guten morgen

Ich habe mich heute noch einmal daran Versucht Indy 10 mit SSL ans laufen zu bekommen.

Ohne SSLIOHandler alles ohne Probleme.

Sobald ich den IO Handler nutze friert die Client Anwendung ein.

Auf dem Server erhalte ich noch die Verbindung das der Client angemeldet ist.
Der Client ansicht liebert mit über die IdTCPCLient Verbindung aber schon nicht mehr das er Verbunden ist.

Über den IOHandler des Clients bekomme ich noch über den OnStatus folgendes bevor sie einfriert.

[CLIENT]: Resolving hostname localhost.
[CLIENT]: Connecting to 127.0.0.1.

Danach geht nichts mehr.

Der SSLIOHandler ist im OI zugeordnet.
Einstellungen:
CertFile: c:\Zertifikat.cer
Method: sslvSSLv2
Mode: sslmUnassigned

Client Anwendung
Delphi-Quellcode:
procedure TForm2.IdTCPClient1Disconnected(Sender: TObject);
begin
  Self.Memo1.Lines.Add('[CLIENT]: Huch');
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  Self.IdTCPClient1.Connect;
end;

procedure TForm2.IdTCPClient1Connected(Sender: TObject);
begin
  Self.Memo1.Lines.Add('[CLIENT]: Mit Server verbunden');
end;

procedure TForm2.IdSSLIOHandlerSocketOpenSSL1Status(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: String);
begin
  Self.Memo1.Lines.Add('[CLIENT]: ' + AStatusText);
end;
[Edit]
Wenn ich den Server beende, reagiert die Client Anwendung auch wieder. Ist mir vorher nie aufgefallen.
Dann kommt am Client die Meldung

Zitat:

---------------------------
Project2
---------------------------
Error connecting with SSL.

error:00000006:lib(0):func(0):EVP lib.
---------------------------
OK
---------------------------
Das Zertifikat ist doch aber richtig zugewiesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 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