Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy TCP Client: OnExecute? Thread verwenden? (https://www.delphipraxis.net/25059-indy-tcp-client-onexecute-thread-verwenden.html)

Tubos 30. Jun 2004 15:40


Indy TCP Client: OnExecute? Thread verwenden?
 
Hallo;

beim Indy TCP Server gibt es ja die komfortable Methode OnExecute, die auch automatisch einen Thread erzeugt.

Muss ich beim Client selbst einen erzeugen, in dem ich ständig readln aufrufe?

Meflin 30. Jun 2004 17:31

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
hi,
also erlichgesagt versteh ich echt dein probelm nicht. warum willst du beim client einen thread erzeugen? und warum sollte readln beim client einen thread erzeugen...???

Tubos 30. Jun 2004 17:43

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
Beim Server erzeugt OnExecute einen eigenen Thread, oder?
Hab ich ausprobiert: sleep(10000) reingetan und die Hauptanwendung ist nicht eingefroren.
Der Taskmanager hat auch mehrere Threads angezeigt.

Mein Serversocket heißt "server", mein Clientsocket "client".
Wenn ich im OnExecute x:=server.readln mache, friert das Hauptprogramm nicht ein.
Ich lese also einen String per readln ein und verteile ihn danach weiter oder verarbeite ihn.
Hmmm...wie ist das eigentlich bei mehreren Verbindungen? Wird da OnExecute mehrmals gestartet?

Ein Client hat aber kein OnExecute.
Wenn ich mit dem Daten empfangen will, muss ich selbst einen Thread erzeugen, oder?

Meflin 30. Jun 2004 17:47

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
nein. du kannst mit dem client nicht so einfach auf daten warten. du musst schon was hinsenden und auf eine antwort vom server warten. das ist ja das client-server prinzip. das onExecute ereignis wird immer dann ausgeführt, wenn ein client eine nachricht zum server schickt. aber umgekehrt funzt das net so ganz!

Tubos 30. Jun 2004 17:54

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
Zitat:

nein. du kannst mit dem client nicht so einfach auf daten warten. du musst schon was hinsenden und auf eine antwort vom server warten.
Aha...also der Server antwortet...und wie empfängt der Client die Antwort?
Mit einem Thread?
Oder gibt es da auch ein Ereignis?

Zitat:

das onExecute ereignis wird immer dann ausgeführt, wenn ein client eine nachricht zum server schickt
Hmmm, habe das getestet und das OnExecute-Ereignis ist ständig aufgetreten wenn die Verbindung hergestellt war :gruebel:

Meflin 30. Jun 2004 17:55

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
du schreibst einfach writeln... und dann gleich dahinter variable := readln() (bin mir net ganz sicher ob der syntax stimmt) dann wir ddas was der server als nächstes zum client schickt (die antwort auf dein writeln) in der variable gespeichert. da brauchst du keinen extra thread dazu.

Tubos 30. Jun 2004 17:57

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
Zitat:

du schreibst einfach writeln... und dann gleich dahinter variable := readln() (bin mir net ganz sicher ob der syntax stimmt) dann wir ddas was der server als nächstes zum client schickt (die antwort auf dein writeln) in der variable gespeichert. da brauchst du keinen extra thread dazu.
Nur friert dann das Hauptprogramm kurz ein wenn die Antwort nicht schnell genug kommt.

Um zurück zur ursprünglichen Frage zu kommen:
Ich muss also einen Thread erzeugen? *g*

Meflin 30. Jun 2004 17:59

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
du musst garnicht. natürlich kannst du. aber ein idAntiFreeze tuts auch.

Tubos 30. Jun 2004 18:22

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
Zitat:

du musst garnicht. natürlich kannst du. aber ein idAntiFreeze tuts auch.
Danke! :D

Meflin 30. Jun 2004 18:24

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
no prob. für diese triviale lösung war das eine schwere geburt ;-) ...

Tubos 30. Jun 2004 18:26

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
ich arbeite ja auch erst seit gestern mit Indy ;)

supermuckl 30. Jun 2004 18:28

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
wenn du einen chat CLIENT programmieren willst.. dann musst du zwangsläufig nen thread der die ganze zeit readln in einer endlosschleife macht, createn!

weil da gibt es strings von anderen usern die über den server an deinen client gesendet werden und da muss man nicht erst ne anforderung an den server schicken..

eine gute sache is die tcp client/server demo die es bei indy gibt.. da sieht man sehr schön wie man das client handling im server gestalten kann ( client record )

falls jemand die sources von meinem noch nicht fertigen secure chat system haben will der kann sich melden dann lad ichs mal hier hoch.. is so ähnlich aufgebaut wie das IRC blos net das selbe protocol

Meflin 30. Jun 2004 19:00

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
wer sagt denn das er einen chat schriebn will? und nur für einen solchen wäre das nötig...

supermuckl 30. Jun 2004 19:07

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
hab ich gesagt ".. da du einen chat schreiben willst.. " ?

Meflin 30. Jun 2004 19:12

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
das nicht aber du redest von einem chatsystem. bei einem "normalen" system reicht anfrage - response, wozu willst du da nen thread brauchen? das ist pure resourcenverschwendung. bei nem chat ists sicherlich sinnvoll...

Tubos 30. Jun 2004 19:20

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
Richtig geraten, es handelt sich um einen Chat :)

Zitat:

wenn du einen chat CLIENT programmieren willst.. dann musst du zwangsläufig nen thread der die ganze zeit readln in einer endlosschleife macht, createn!
weil da gibt es strings von anderen usern die über den server an deinen client gesendet werden und da muss man nicht erst ne anforderung an den server schicken..
ja...

Zitat:

eine gute sache is die tcp client/server demo die es bei indy gibt.. da sieht man sehr schön wie man das client handling im server gestalten kann ( client record )
ja, das programm kenne ich.
den server-code habe ich mir noch nicht so genau angesehen, der client ist kompliziert genug ;)

supermuckl 30. Jun 2004 22:14

Re: Indy TCP Client: OnExecute? Thread verwenden?
 
Zitat:

wozu willst du da nen thread brauchen?
ich sag ja in einem chat.. :)

klar das man in so einem fall kein threading beim client braucht.. ( wo man nicht dauernd "lesen muss" )


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