Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Prism .NET's TcpClient: Datenempfang abwarten, ohne zu blockieren (https://www.delphipraxis.net/52233-nets-tcpclient-datenempfang-abwarten-ohne-zu-blockieren.html)

Aenogym 25. Aug 2005 20:26


.NET's TcpClient: Datenempfang abwarten, ohne zu blockieren
 
hi ihr,

ich habe einen System.Net.Sockets.TcpClient als private member einer klasse. verbinden zum server und so weiter klappt alles soweit.
nun möchte ich den TcpClient dazu veranlassen, permanent auf daten zu warten und bei empfang ein event auszulösen. das ganze sollte meine anwendung aber nicht blockieren, weshalb ja nur ein thread in frage kommt.

und jetzt meine frage: wie erstelle ich einen thread, der den TcpClient die ganze zeit lang auf daten warten lässt, bei erfolgreichem versand ein event auslöst und dann weiter auf daten wartet, bis ich ihn beende? :)

ich hoffe, dass ihr mir helfen könnt, denn in sachen .NET bin ich noch ganz grün :stupid: .
danke schonmal,
aenogym

supermuckl 25. Aug 2005 20:28

Re: .NET's TcpClient: Datenempfang abwarten, ohne zu blockie
 
mit .NET kenn ich mich jetzt net aus, aber im prinzip würde doch eine schleife reichen, die die Lines abholt und wenn was angekommen ist, das event auslöst und auch noch auf das beenden des threads reagiert

Aenogym 25. Aug 2005 20:32

Re: .NET's TcpClient: Datenempfang abwarten, ohne zu blockie
 
Zitat:

Zitat von supermuckl
mit .NET kenn ich mich jetzt net aus, aber im prinzip würde doch eine schleife reichen, die die Lines abholt und wenn was angekommen ist, das event auslöst und auch noch auf das beenden des threads reagiert

ja an sowas wie "while ListenFordata = true do..." dahcte ich auch schon. nur wie erstelle ich einen thread? die delphi 2005 hilfe ist sowas von unvollständig ( :wall: ich finde zu "thread" nur themen von c++ und allgemeines...). wie ich einen thread mithilfe von TThread aus dem borland.vcl.* namespace erstelle, weiß ich. aber ich will die in .NET integrierten möglichkeiten nutzen.

in c# geht das so einfach... :(
(robert, du kennst dich doch sicher damit aus :stupid: )

aenogym

Niko 25. Aug 2005 20:37

Re: .NET's TcpClient: Datenempfang abwarten, ohne zu blockie
 
Hi,

du kannst die Methoden BeginRead/EndRead des NetworkStreams verwenden, den du von der Methode GetStream erhälst. Diese Methoden verwenden implizit Threads um ein asynchrones Lesen mit Rückruffunktion auszuführen.

Robert_G 25. Aug 2005 20:41

Re: .NET's TcpClient: Datenempfang abwarten, ohne zu blockie
 
Zitat:

Zitat von Aenogym
in c# geht das so einfach... :(
(robert, du kennst dich doch sicher damit aus :stupid: )

Warum machst du es dann nicht in C#? Ehrlich... :gruebel:
Aber die gleichen Klassen, die du in C# genommen hättest, gibt es auch in D.Net...

Aenogym 25. Aug 2005 20:47

Re: .NET's TcpClient: Datenempfang abwarten, ohne zu blockie
 
erstmal danke an niko. BeginRead schaut gut aus :)

Zitat:

Zitat von Robert_G
Warum machst du es dann nicht in C#? Ehrlich... :gruebel:
Aber die gleichen Klassen, die du in C# genommen hättest, gibt es auch in D.Net...

weil ich zwar wieß, wie ich in c# ganz einfach threads erstelle - größere probleme kann ich aber viel besser in delphi lösen (weil ich von c# auch nicht grad soo viel ahnung hab).
und dass es die gleichen klassen da gibt, ist mir schon klar. nur ich wüsste nicht, wie ich
Code:
Thread myThread = new Thread(new ThreadStart(myMethod));
in delphi umsetzen sollte :roll:

aber danke erstmal. ich werd .NET schon noch raffen, wenn ich endlich die Hhilfe zum laufen gebracht hab...

aenogym

Robert_G 25. Aug 2005 20:56

Re: .NET's TcpClient: Datenempfang abwarten, ohne zu blockie
 
Zitat:

Zitat von Aenogym
und dass es die gleichen klassen da gibt, ist mir schon klar. nur ich wüsste nicht, wie ich
Code:
Thread myThread = new Thread(new ThreadStart(myMethod));
in delphi umsetzen sollte :roll:

:shock: Autsch...
Delphi-Quellcode:
var Thread myThread;
....
myThread := Thread.Create(ThreadStart.Create(myMethod));
Zitat:

Zitat von Aenogym
aber danke erstmal. ich werd .NET schon noch raffen, wenn ich endlich die Hhilfe zum laufen gebracht hab...

Warum ihr das immer noch nicht verstanden habt....
Denkt euch einfach, dass es keine Hilfe in D2005 gibt. (Die ist ja sowieso nicht integriert sondern schwirrt als loses Fenster durch die Gegend :wall: )
Start\Programme\.Net SDK\Doku
Einfach nur da suchen...

btw: Du wusstest wie du es in C# schreibst, aber so einfache Sachen kannst du nicht in Delphi? Bist du dir wirklich sicher, dass du weißt, wo du mehr Ahnung hast? *g*

Aenogym 25. Aug 2005 21:11

Re: .NET's TcpClient: Datenempfang abwarten, ohne zu blockie
 
Zitat:

Zitat von Robert_G
Delphi-Quellcode:
var Thread myThread;
....
myThread := Thread.Create(ThreadStart.Create(myMethod));
[...]
Denkt euch einfach, dass es keine Hilfe in D2005 gibt.
Start\Programme\.Net SDK\Doku

also genau den code hab ich versucht (und auch etwas variiert hab ichs). aber da gibt's nur ne fehelrmeldung: "Record, object or class type required." :roll: (er meint, ThreadStart.create sei ein undefinierter bezeichner. ThreadStart kennt er aber).
und das mit der hilfe: jo, nachschauen im .NET SDK tu ich ja. nur das hilft mir eben herzlich wenig, wenn ich es in delphi nicht anzuwenden weiß (siehe obigen code).

aber gut, bin halt Delphi.Win32 verwöhnt und muss mit der schönen neuen .NET-welt erstmal versuchen klarzukommen ;)

aenogym

Robert_G 25. Aug 2005 21:30

Re: .NET's TcpClient: Datenempfang abwarten, ohne zu blockie
 
ups... ThreadStart als Delegate wird doch in D.Net _anders_ behandelt.
Ich hab's nicht im Kopf. Für events muss man ja das selten "hübsche" Include(Event, Methode) nehmen.
Mich würde nicht wundern, wenn dein Schnipsle so aussehen könnte:
Delphi-Quellcode:
Thread.Create(@Methode)
Bin gerade zu gut gelaunt für D.Net, kann es also nicht testen... ;)

Aenogym 25. Aug 2005 21:47

Re: .NET's TcpClient: Datenempfang abwarten, ohne zu blockie
 
ja, so kompiliert er das ohne zu murren. nur mit BeginRead komm ich noch nicht klar. Aber ich schaff das schon :)

aenogym


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr.
Seite 1 von 2  1 2      

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