Hallo
ich hoffe ihr könnt mir helfen
ich arbeite grade ein bisschen mit TCPListener und TCPClients
doch im meinem code trifft die socketException auf in der es heißt:
Ein Blockierungsvorgang wurde durch den Aufruf von WSACancelBlockingCall unterbrochen
einmal der code
Meine Form1(ich hab eine listbox1 und ein button1 erstellt)
Und Hier meine classe Client
und falls es euch weiterhilft der client der sendet
als erste starte ich den server
click auf button1
und dann starte ich den server
und sende was
und dann schließ ich den server wieder
und wenn ich dann den button1 nocheinmal clicke dann giebt er die fehlermeldung:
Ein Blockierungsvorgang wurde durch den Aufruf von WSACancelBlockingCall unterbrochen
Wisst ihr vielleicht was ich vergessen habe??
ich hoffe ihr könnt mir helfen
ich arbeite grade ein bisschen mit TCPListener und TCPClients
doch im meinem code trifft die socketException auf in der es heißt:
Ein Blockierungsvorgang wurde durch den Aufruf von WSACancelBlockingCall unterbrochen
einmal der code
Meine Form1(ich hab eine listbox1 und ein button1 erstellt)
VB.NET-Quellcode
- Imports System
- Imports System.Text
- Imports System.Net
- Imports System.Net.Sockets
- Imports System.Threading
- Imports System.IO
- Public Class Server
- Dim Listener As TcpListener
- Dim Client As Client
- Dim thWartenverbindung As Thread
- Dim thStart As Thread
- Dim Clientstart As Boolean = False
- Private Sub Server_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
- thWartenverbindung = New Thread(AddressOf AufVerbindungwarten)
- Listener = New TcpListener(GetHostIP, 5000)
- thStart = New Thread(AddressOf Start)
- End Sub
- Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdStartServer.Click
- Start()
- End Sub
- Sub Start()
- Listener.Start()
- thWartenverbindung = New Thread(AddressOf AufVerbindungwarten)
- thWartenverbindung.Start()
- Dim weiter As Boolean = False
- Do Until weiter = True
- If Clientstart = True Then 'Clientstart wird true wenn die sub aufverbindung warten connected hat
- Client.start()
- weiter = True
- End If
- Application.DoEvents()
- Loop
- Listener.Stop()
- End Sub
- Sub AufVerbindungwarten()
- Client = New Client(Listener.AcceptTcpClient)
- StatusAusgabe("Mit einem neuen Client connected!")
- Clientstart = True
- AddHandler Client.Meldung, AddressOf StatusAusgabe
- End Sub
- Public Delegate Sub DoStatusAus(ByVal Meldung As String)
- Private Sub StatusAusgabe(ByVal Meldung As String)
- If ListBox1.InvokeRequired Then
- Dim ParamListe() As Object = {Meldung}
- ListBox1.Invoke(New DoStatusAus(AddressOf DoStatusAusgabe), ParamListe)
- Else
- DoStatusAusgabe(Meldung)
- End If
- End Sub
- Private Sub DoStatusAusgabe(ByVal Meldung As String)
- ListBox1.Items.Add(Meldung)
- ' Zuletzt hinzugefügtes Element selektieren
- ListBox1.SetSelected(ListBox1.Items.Count - 1, True)
- End Sub
- Function GetHostIP() As IPAddress
- For Each IPAdr As IPAddress In Dns.GetHostEntry("oke-pc").AddressList
- If IPAdr.AddressFamily = AddressFamily.InterNetwork Then
- Return IPAdr
- End If
- Next
- Return IPAddress.Loopback
- End Function
- End Class
Und Hier meine classe Client
VB.NET-Quellcode
- Imports System
- Imports System.Text
- Imports System.Net
- Imports System.Net.Sockets
- Imports System.Threading.Thread
- Imports System.Threading
- Public Class Client
- Dim Client As TcpClient
- Dim Ende As Boolean = False
- Dim Buffer(1024) As Byte
- Public Startthread As New Thread(AddressOf Startforthread)
- Event Meldung(ByVal Meldung As String)
- Sub New(ByVal x As TcpClient)
- Client = x
- End Sub
- Private Sub Startforthread()
- Try
- Ende = False
- Do Until Ende = True
- Dim ar As IAsyncResult
- ReDim Buffer(1024)
- ar = Client.GetStream.BeginRead(Buffer, 0, 1024, Nothing, Nothing)
- Client.GetStream.EndRead(ar)
- RaiseEvent Meldung(Encoding.Default.GetString(Buffer))
- Loop
- Catch
- If Client.Connected = False Then
- RaiseEvent Meldung("Ein Client hat die Verbindung unterbrochen")
- Else
- RaiseEvent Meldung("error!!")
- End If
- End Try
- End Sub
- Public Sub start()
- Startthread = New Thread(AddressOf Startforthread)
- Startthread.Start()
- End Sub
- End Class
und falls es euch weiterhilft der client der sendet
VB.NET-Quellcode
- Imports System.Text
- Imports System.Net.Sockets
- Public Class Form1
- Dim client As New TcpClient("oke-pc", 5000)
- Dim fisrst As Boolean = True
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- client.GetStream.BeginWrite(Encoding.Default.GetBytes(TextBox1.Text), 0, Encoding.Default.GetBytes(TextBox1.Text).Length, Nothing, Nothing)
- End Sub
- End Class
als erste starte ich den server
click auf button1
und dann starte ich den server
und sende was
und dann schließ ich den server wieder
und wenn ich dann den button1 nocheinmal clicke dann giebt er die fehlermeldung:
Ein Blockierungsvorgang wurde durch den Aufruf von WSACancelBlockingCall unterbrochen
Wisst ihr vielleicht was ich vergessen habe??