vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
UDP-Empfang - Fehler: Normalerw. darf jede Socketadr. nur einmal verwendet werd. 
Autor: Soenke1492
Datum: 01.07.12 10:10

Guten Morgen zusammen,

ich bin heute Nacht mal wieder verzweifelt und wende ich mich jetzt voller Hoffnung an Euch

Ich habe eine Sub geschrieben, in der ein Thread gestartet wird und auf den Empfang von Anweisungen auf Port 4500 wartet. Nach Empfang sollen die Daten verarbeitet und zurückgesendet werden. Das Gegenstück mit Senden und anschließendem Warten auf Receive klappt problemlos.
Ich erhalte jedoch immer die Fehlermeldung: "Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden"

Hier die relevanten Code-Schnipsel:
Public Sub udp_zufuehrung_empfangen()
        Try
            thread_zufuehrung = New System.Threading.Thread(AddressOf _
              receivemessages)
            thread_zufuehrung.SetApartmentState(Threading.ApartmentState.STA)
            thread_zufuehrung.Start()
            log_anfuegen("Thread erfolgreich gestartet")
        Catch ex As Exception
            log_anfuegen("Fehler beim Starten des Threads für die" & _
              "Zuführungsverwaltung! - " & ex.Message)
        End Try
    End Sub
Und hier der Receive-Teil. Der Fehler tritt in der fett geschriebenen Zeile auf:
    Public Sub receivemessages()
        Dim brcv() As Byte
        Dim RemoteIpEndPoint As New System.Net.IPEndPoint( _
          System.Net.IPAddress.Parse("192.168.1.193"), 0)
        Try
            Dim udp_zufuehrung As New System.Net.Sockets.UdpClient(4500) 
            brcv = udp_zufuehrung.Receive(RemoteIpEndPoint)
            log_anfuegen("Es wurden Daten auf Port 4500 empfangen!")
Ich hoffe sehr, dass ich nur ein Blackout habe und ihr mir helfen könnt.
Vielen Dank im voraus!!!
Sönke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: UDP-Empfang - Fehler: Normalerw. darf jede Socketadr. nur einmal verwendet werd. 
Autor: Soenke1492
Datum: 01.07.12 11:34

Ich bin es nochmal

Also ich habe den Fehler gefunden, aber keine Lösung parat.
Es ist so, dass der ListenThread bei Programm-Beendigung nicht beendet wird. Damit ist beim Neustart der Port belegt und kann nicht beobachtet werden. Ich bin darauf aufmerksam geworden, als ich testweise auf Port 9999 gegangen bin. Damit funktionierte es dann genau einmal.

Jetzt ist also die Frage, wie ich den Thread bei Programm-Ende zuverlässig beenden kann, sodass der Port beim Neustart wieder verbunden werden kann?

Viele Grüße,

Sönke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: UDP-Empfang - Fehler: Normalerw. darf jede Socketadr. nur einmal verwendet werd. 
Autor: xirton
Datum: 01.07.12 20:28

Die wichtigen Codeteile sind leider nich zu sehen bei dir. Du musst darauf achten einen Socket immer zu schließen, wenn du ihn nich mehr benötigst. -> Socket.close().
Achte auch darauf, dass der gestartete Thread sauber beendet wurde und nicht zufälligerweise den Socket offen hält, da das receive des Sockets ja blockierend ist. Wenn du diese zwei Punkte beachtest, funktionieren Sockets reibungslos!

Beitrag wurde zuletzt am 01.07.12 um 20:29:51 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel