AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy: Ausserhalb von OnExecute senden?
Thema durchsuchen
Ansicht
Themen-Optionen

Indy: Ausserhalb von OnExecute senden?

Ein Thema von McMorton · begonnen am 27. Mär 2006 · letzter Beitrag vom 28. Mär 2006
Antwort Antwort
McMorton

Registriert seit: 8. Mär 2006
45 Beiträge
 
#1

Indy: Ausserhalb von OnExecute senden?

  Alt 27. Mär 2006, 23:02
Hallo

Ich bin gerade dabei mich in die Indy-Komponenten einzuarbeiten.

Eine TCP Server - Client Verbindung klappt auch schon ganz gut.

Nun habe ich aber folgendes Problem: Der Server soll, nachdem einmal von Client-Setie aus eine Verbindung hergestellt wurde jederzeit senden.
Das heißt: Es kann sein das der Server sofort was zurückschickt, aber ev. auch erst nach 20 min.

Beim Client löse ich das Problem, indem ich die ReadLN Methode in einer Schleife laufen lasse (eigener Thread)

Wie kann ich aber mit dem Server senden?

Direkt auf eine Verbindung antworten geht ja in dem OnExecute-Event.
Aber ausserhalb dieses Threads ist ja die Verbindung nicht bekannt.

Ich habe irgentwas davon gehört das man die Clients in eine Clientlist oder so packen kann. Habe aber dazu nichts richtiges gefunden.

P.S. : Indy 10
Delphi2005
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Indy: Ausserhalb von OnExecute senden?

  Alt 28. Mär 2006, 16:59
Hi,
ich weiß jetzt nicht was für Listen Indy dir schon direkt zur Verfügung stellt. Aber du kannst das ganze auch selber machen. Erstell dir einfach eine TObjectList. In diese fügst du bei jedem Connect den neuen TIdPeerThread hinzu, wichtig, bei Disconnect entfernst du die dann natürlich auch wieder.

Wenn du nun etwas senden möchtest, so kannst du über die Items der TObjectList iterieren und an jeden hier eingetragenen TIdPeerThread etwas senden (dazu das entsprechende Item vorher casten).

Ansonsten solltest du dir vielleicht noch den TIdThreadMgr anschauen, hört sich zumindest nach etwas Richtigem an.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
McMorton

Registriert seit: 8. Mär 2006
45 Beiträge
 
#3

Re: Indy: Ausserhalb von OnExecute senden?

  Alt 28. Mär 2006, 22:47
Hi.

Versteh ich das so richtig:

ich habe ne TObjectList (was immer das auch ist Bin noch nicht so fit in Delphi)
Dort trage ich beim OnConnect-Event des Servers den übergebenen TIdPeerThread ein.

Wenn ich nun was senden will nehme ich z.B. TIdPeerThread nr. 2 von der liste.

Was meinst du damit das ich das item casten muss?


Bittet indy nicht irgentwo schon so eine Verwaltung an?
Ich glaube ich habe da mal was gelesen. Kann mich aber nicht genau erinnern.


Danke erstmal für die Antwort
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Indy: Ausserhalb von OnExecute senden?

  Alt 28. Mär 2006, 23:07
ich glaube der threadmanager von indy ist das was du unter verwaltung von indy aus meinst. bin mir nicht sicher, hab es bisher auch immer selbst gecoded

Zitat:
Was meinst du damit das ich das item casten muss?
was in der tobject list drin ist, sind nacher zeiger.
und bei zeigern weis man meistens nicht, was sie für ein typ haben

also sagt man dann dem compiler, das ein item aus der objectlist ein "tidpeerthread" ist und schon kann man damit weiter arbeiten

(objectlist.items[0] as tidpeerthread).socket.... so ungefär

und pass auf, wenn du auf die objekte zugreifst, wenn du das aus threads heraus machst. denn die können ja bekannter weise auch gleichzeitig auf die liste zugreifen und dann gibts evtl datensalat
also immer schön mit synchronisation arbeiten

pseudocode:
Delphi-Quellcode:
criticalsection.enter;
objectlist.delete(zulöschendesitem);
criticalsection.leave;
hoffe in der schnelle geholfen zu haben.
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
McMorton

Registriert seit: 8. Mär 2006
45 Beiträge
 
#5

Re: Indy: Ausserhalb von OnExecute senden?

  Alt 28. Mär 2006, 23:15
Ok. Danke. Werde ich morgen mal ausprobieren.

Nachtrag:

Hat super funktioniert. Danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 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