Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Threads, Sockets und "vorzeitig" die Verbindung beenden (https://www.delphipraxis.net/91179-threads-sockets-und-vorzeitig-die-verbindung-beenden.html)

mr47 30. Apr 2007 22:19


Threads, Sockets und "vorzeitig" die Verbindung be
 
Ich hab mal ein Problem. Das ganze kommt aus einer anderen Programmiersprache aber das ist egal.
(Um genauer zu sein aus einer .NET-Sprache, vielleicht hilfts ja :wink: )

Ich will 'ne Klasse schreiben, die es erleichtert Sockets zu verwenden. Ich komm gleich zum Kern: Um das ganze schön sauber zu lösen hab ich die Empfangsroutine ( Receive() ) und die Routine, die Verbindungen annimmt ( Accept() ) in Threads ausgelagert.
Das Problem ist, wenn ich immer empfangsbereit sein will, dann muss ich im Thread immer Receive(...) aufrufen. Der Thread bleibt an dieser Stelle stehen und wartet. Sobald was gesendet wird, wird es in ein Byte-Array geschrieben und kann verwendet werden.
Was aber mach ich, wenn ich die Verbindung beenden will. Der Thread "hängt" an der Stelle wo Receive() steht.

Soll ich den Thread einfach killen? Die Verbindung beenden endet in einer Exception...

Gruß mr47

Niko 1. Mai 2007 12:01

Re: Threads, Sockets und "vorzeitig" die Verbindun
 
Hi,

wenn du Socket.Close aufrufst, sollte Receive mit einer ObjectDisposedException zurückkehren, die du ja entsprechend abfangen kannst.

Statt einem eigenen Thread kannst du übrigens auch die Methoden BeginReceive, EndReceive verwenden.

mr47 2. Mai 2007 14:52

Re: Threads, Sockets und "vorzeitig" die Verbindun
 
Hi!

Danke für deine Antwort, ich konnte nicht früher schreiben wegen Zeitmangels.

Okay soweit.
Wie ist das mit Begin-/EndReceive(). Wenn ich EndReceive() aufrufe, wird der asynchrone Aufruf von BeginReceive() unterbrochen, oder hab ich das falsch verstanden?
Das wäre ja dann viel einfacher als Threads.

Gruß und danke im Voraus.

mr47

Niko 2. Mai 2007 16:45

Re: Threads, Sockets und "vorzeitig" die Verbindun
 
Zitat:

Zitat von mr47
Wie ist das mit Begin-/EndReceive(). Wenn ich EndReceive() aufrufe, wird der asynchrone Aufruf von BeginReceive() unterbrochen, oder hab ich das falsch verstanden?

Nein, wenn du einen Aufruf von BeginReceive() abbrechen willst, musst du trotzdem Close() aufrufen. EndReceive() dient dazu, die Daten, die asynchron empfangen wurden, auszulesen. Ein Beispiel gibt's im MSDN.

mr47 2. Mai 2007 17:23

Re: Threads, Sockets und "vorzeitig" die Verbindun
 
Okay, danke dir!


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