Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Datenübertragung im Netzwerk (https://www.delphipraxis.net/180835-datenuebertragung-im-netzwerk.html)

MechMac666 22. Jun 2014 13:12

Datenübertragung im Netzwerk
 
Hallo,

ich habe mit den Standard-Komponenten von Delphi einen Client und einen Server erstellt.
Zunächst sende ich eine Anfrage an den Server. Diese Anfrage wird bearbeitet und das Resultat soll zurück an den Clienten gesendet werden.
Wie stelle ich das am besten an?

1. Ich bearbeite die Anfrage direkt im OnAccept Event des Servers und könnte dann über Clientsocket zurücksenden.
2. Der Server bekommt zusätzlich eine Client Komponente und der Client noch eine Server-Komponente. (Wobei mir das eher als nicht praktikabel vorkommt)

Zu Lösung 1:
Das Problem bei Lösung 1 ist, das die Bearbeitung der Anfrage, welche der Server erhalten hat, evtl. ein bisschen Zeit in anspruch nimmt. Ich denke mir, dass das nicht so gut ist, wenn ich die Server-komponente durch die Bearbeitungszeit so lange blockiere.

Zu Lösung 2:
Aktuell speichere ich die erhaltenen Anfragen in eine Art Job-Liste und bearbeite sie der Reihe nach ab. In der Jobliste steht auch die IP-Adresse, von der die Anfrage ursprünglich kam.
Meine Gedanke war dann, nach der Bearbeitung das Resultat zurück zum Client zu senden. Ich habe jetzt aber nur dessen IP und kann nicht mehr auf Clientsocket vom OnAccept Ereignis zurückgreifen.
So wie ich das verstehe, kann der Server nur über den Clientsocket zum Clienten senden.

Welcher Weg wäre hier zu empfehlen?

Captnemo 22. Jun 2014 18:16

AW: Datenübertragung im Netzwerk
 
Hi, ich habe gerade sowas mit den ICS Komponenten realisiert.
Dabei habe ich in der einen Anwendung einen Socketserver, der bei einer ankommenden Verbindung für diese eine Kommunikationsthread erzeugt und die Verbindung zwecks Nachrichtenempfang an diesen übergibt.
Der Thread macht nichts anderes als die Nachrichten zu empfangen und in eine Stringlist des Hauptprogramms einzutragen. Anschließend benachrichtigt er per Postmessage das Hauptprogramm, was sich um die weitere Verarbeitung kümmert. So kann der Thread fleißig empfangen und wird nicht mit irgendwelchen Bearbeitungen am Empfang gehindert.

Der Client arbeitet ähnlich, allerdings nur mit einem Thread (zusätzlich zum Hauptthread) nach dem gleichen Prinzip. Im Thread gibt es natürlich auch eine Stringlist, die die zu senden Nachrichten enthält.

Die Datenübergabe vom Hauptthread in den Clientthread erfolgt per Postmessage.

Sowohl Client als auch Server können über den Socket Daten versenden.

Wenn du mit den Komponenten arbeiten willst, kann ich dir gerne bei der Realisierung helfen.
Ich finde zwar die ICS nicht zwangsläufig selbsterklärend, und es gibt keine richtige Dokumentation, aber es gibt ein paar gute Internetseiten und gute Demos deren Studium mir gut geholfen hat.


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