Ich habe eine System.Net.Sockets.Socket eingerichtet. Ich starte den Socket, der auf eingehende Verbindungen hört, um Socket-Anfragen zu nehmen. Dieselbe Buchse sollte aufhören können zu hören und schreiben und eine Verbindung zu anderen Sockets herstellen. Nachdem ich den Socket auf Listen gesetzt habe, kann ich keinen Verbindungsbefehl senden. Ich erhalte diese Ausnahme:Socket Listen und Connect
Eine nicht behandelte Ausnahme des Typs ‚System.InvalidOperationException‘ aufgetreten in System.dll Zusätzliche Informationen: Sie können diese Operation nicht durchführen, nachdem die Listen-Methode aufrufen.
Wie kann ich den Status ändern und zulassen, dass er die Verbindungen wechselt und zum Abhören zurückkehrt? Ich verwende TCP localhost
Public Class SocketHandler
Private Socke As Sockets
Private connectThread As Thread
Private listenThread As Thread
Private listening As Boolean = False
Public Sub New()
listenThread = New Thread(Address of Listen)
listenThread.IsBackground = True
listenThread.Start()
End New
Private Sub Listen()
Socke.Bind(New IPEndPoint(IPAddress.Any, Socke.Port))
Socke.Listen(5)
While Listening
Dim Sock As Sockets = DirectCast(Socke.Accept(), Sockets)
If Not Socke.Clients.Contains(Sock) Then
Socke.Clients.Add(Sock)
End If
End While
End Sub
Private Connect(ByVal sock As Sockets)
connectThread = New Thread(Sub() Connecting(sock))
connectThread.IsBackground = True
connectThread.Start()
End If
Private Sub Connecting(Byval sock As Sockets)
'Right Here is where I need to stop Listening and have the Socket connect
Socke.Connect(sock) 'Here is where I get the Exception
connectThread.Abort()
'Here I need to turn the Listening back on
End Sub
Public Class Sockets : Inherits Socket
Public Port As Integer
Public IPAddress As IPAddress
Public Clients As New List(Of Sockets)
Public Overloads Sub Connect(Byval sock as Sockets)
Dim point As New IPEndPoint(DirectCast(socket.LocalEndPoint), IPEndPoint)
connectDone.Reset()
BeginConnect(point, AddressOf Callback, sock)
connectDone.WaitOne()
End Sub
Private Sub Callback(ByVal r As IAsyncResult)
EndConnect(r)
connectDone.Set()
End Sub
End Class
** A) ** Welche Art von Protokoll verwenden Sie? ** B) ** Wo tritt dieser Fehler auf? ** C) ** Zeigen Sie uns Ihren Code. –
@VisualVincent hilft das? –
Zusätzlich zu meinen Kommentaren zur x82-Antwort empfehle ich, eine meiner vorherigen Antworten zu sehen. ** Wenn Sie _ _ sind, erreichen Sie die Daten zwischen den beiden Endpunkten: [** TCP-Client-zu-Server-Kommunikation **] (http://stackoverflow.com/a/35240061/3740093). –