我設置了一個System.Net.Sockets.Socket。我開始監聽傳入連接的套接字以獲取套接字請求。這個套接字應該能夠停止Listen和寫入並連接到其他套接字。將套接字設置爲Listen後,我無法發送連接命令。我得到這個異常:套接字監聽和連接
「System.InvalidOperationException」類型的未處理的異常出現在 System.dll中 其他信息:調用Listen方法後,您可能無法執行此操作。
我該如何改變它的狀態並允許它改變連接並返回到監聽?我正在使用TCP本地主機
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)**您使用什麼樣的協議? ** B)**這個錯誤發生在哪裏? ** C)**向我們顯示您的代碼。 –
@VisualVincent有幫助嗎? –
除了我對x82的回答的評論之外,當** _你在兩個端點之間傳輸數據時,我建議看到我以前的答案之一_ **:[** TCP客戶端到服務器通信**]( http://stackoverflow.com/a/35240061/3740093)。 –