Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TclientSockset und TServerSocket (https://www.delphipraxis.net/73284-tclientsockset-und-tserversocket.html)

xthing 15. Jul 2006 05:57


TclientSockset und TServerSocket
 
Hi Leuete,

ich habe 3 Probleme und darüber die Nacht gegrübelt :-).

Also, ich möchte über den TClient ein SQL Statement versenden. Das klappt. Nun soll der TSockest Server dieses Statement in Empfang nehmen und über Tquery eine Datenbankabfrage starten. Das klappt auch und der Tclient bekommt den Inhalt einer Tabelle geliefert. Nun zu meinen Fragen:

1. Manche Sql Abfragen dauern länger und ich möchte den Client schliessen. Wie kann ich dem Server klarmachen: Der Cleint ist geschlossen sende später?

2. Wie kann ich mehrere Anfragen an den Server senden und diese nacheinander abgearbeiten lassen?

3. Wenn ich mit mehreren Clients arbeite, wie verwalte ich am Server die SQL Abfragen? D.h. wie weiss der Server welcher Client die SQL Abfrage geschickt hat?

Eventuell muss ich Threadlisten anlegen, bin mir aber nicht sicher und weiss ehrlich gesagt nicht wie das funktioniert.

Ich weiss, das sind eine Menge Fragen. Es wäre schön, wenn ihr mir Helfen könntet.

Viele Grüsse
xthing

Muetze1 15. Jul 2006 15:00

Re: TclientSockset und TServerSocket
 
Zitat:

Zitat von xthing
1. Manche Sql Abfragen dauern länger und ich möchte den Client schliessen. Wie kann ich dem Server klarmachen: Der Cleint ist geschlossen sende später?

Beim Client einfach schliessen und der Server bekommt dann schliesslich dies mit über das Ereignis OnClientDisconnect wo ihm auch gleich der Socket des Clients mit übergeben wird und er somit weiss, welcher Client das war.

Zitat:

Zitat von xthing
2. Wie kann ich mehrere Anfragen an den Server senden und diese nacheinander abgearbeiten lassen?

Bau dir eine Liste wo du nacheinander die ankommenden Anfragen einreihst und vorne nacheinander abarbeitest.

Zitat:

Zitat von xthing
3. Wenn ich mit mehreren Clients arbeite, wie verwalte ich am Server die SQL Abfragen? D.h. wie weiss der Server welcher Client die SQL Abfrage geschickt hat?

Bei jedem Ereignis des Sockets, so auch wenn du Daten empfängst, bekommst du mit Socket eine eindeutige Instanz pro Client geliefert. Diese kannst du dir auch woanders vermerken - z.B. zu der jeweiligen Anfrage - um dann nach erfolgter Abarbeitung der Abfrage direkt diese Instanz zu nehmen und ihr das Ergebnis zu übergeben. Du musst nur darauf achten, dass nach einen OnClientDisconnect diese Instanz nicht mehr gültig ist, also musst sie zurücksetzen, wenn du sie dir noch woanders vermerkst.

xthing 15. Jul 2006 15:30

Re: TclientSockset und TServerSocket
 
@Muetze1

Danke, zu den Punkten 1+2 hab ich verstanden. Aber zu 3. nicht so ganz. Wie kann ich mir die Instanz merken und wie kann ich diese identifizieren. Ich hab was von Socket als Integer Wert gelesen (client.Socket.Connect(Socket:Integer). Ist das eine Art Socket Nr.?

Danke noch mal für Deine Hilfe. Ich bin im Breich Server usw. erst am Anfang.

Viele Grüsse
xthing

Muetze1 15. Jul 2006 16:27

Re: TclientSockset und TServerSocket
 
Client.Socket ist die genannte TCustomWinSocket Instanz beim TClientSocket und Server.Socket.Connections[] sind die TCustomWinSocket Instanzen für die Clientverbindungen. Aber wie gesagt: bei jedem Ereignis des TServerSocket und des TClientSockets bekommst du doch einen Parameter namens "Socket" vom Typ TCustomWinSocket mit übergeben. Dies ist der jeweilige Socket der das Ereignis ausgelöst hat.

Die Klasse TCustomWinSocket bietet dir alle Funktionalitäten durch Methoden an um bestimmte Aktionen über den Socket zu machen...

xthing 15. Jul 2006 16:53

Re: TclientSockset und TServerSocket
 
Danke ..., jetzt habe ich einen Weg gefunden. (denke ich)

Bye Bye
Ralf


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