![]() |
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 |
Re: Client - Server Kommunikation(Sockets) umstellen auf Lin
Zitat:
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. |
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? |
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 |
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:
[Edit]
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; Wenn ich den Server beende, reagiert die Client Anwendung auch wieder. Ist mir vorher nie aufgefallen. Dann kommt am Client die Meldung Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz