AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Threads, Sockets und "vorzeitig" die Verbindung beenden
Thema durchsuchen
Ansicht
Themen-Optionen

Threads, Sockets und "vorzeitig" die Verbindung beenden

Ein Thema von mr47 · begonnen am 30. Apr 2007 · letzter Beitrag vom 2. Mai 2007
Antwort Antwort
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#1

Threads, Sockets und "vorzeitig" die Verbindung be

  Alt 30. Apr 2007, 22:19
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 )

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
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Threads, Sockets und "vorzeitig" die Verbindun

  Alt 1. Mai 2007, 12:01
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.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Threads, Sockets und "vorzeitig" die Verbindun

  Alt 2. Mai 2007, 14:52
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
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Threads, Sockets und "vorzeitig" die Verbindun

  Alt 2. Mai 2007, 16:45
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.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Threads, Sockets und "vorzeitig" die Verbindun

  Alt 2. Mai 2007, 17:23
Okay, danke dir!
  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 13:51 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