vb.net服务器套接字在新客户端接受新客户端后关闭以前的客户端
正如我在标题中所说的,服务器不侦听以前客户端的数据包。我 只需要服务器读取来自多个客户端的所有数据包 这是我的代码,谢谢你的帮助vb.net服务器套接字在新客户端接受新客户端后关闭以前的客户端,vb.net,sockets,Vb.net,Sockets,正如我在标题中所说的,服务器不侦听以前客户端的数据包。我 只需要服务器读取来自多个客户端的所有数据包 这是我的代码,谢谢你的帮助 serverSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) Dim ipAddress As IPAddress = ipAddress.Parse("192.168.2.202") Dim IpEndPoint As IP
serverSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim ipAddress As IPAddress = ipAddress.Parse("192.168.2.202")
Dim IpEndPoint As IPEndPoint = New IPEndPoint(ipAddress, 15002)
serverSocket.Bind(IpEndPoint)
serverSocket.Listen(1500)
serverSocket.BeginAccept(New AsyncCallback(AddressOf OnAccept), Nothing)
代理Sub_OnAccept(由Val ar作为IAsyncResult)
私有Sub-OnAccept(按IAsyncResult的值ar)
客户端(套接字)
特例
End Try
AddClient(clientSocket)
End Sub
Delegate Sub _AddClient(ByVal client As Socket) 'delege used to invoke AddCLient()
Private Sub AddClient(ByVal client As Socket)
If InvokeRequired Then
Invoke(New _AddClient(AddressOf AddClient), client)
Exit Sub
End If
Dim lvi As New ListViewItem(client.LocalEndPoint.ToString)
lvi.Tag = client
ListBox1.Items.Add(client.RemoteEndPoint.ToString & " Bağlandı")
End Sub
End Try
End Sub
代表子项接收(由VAL ar作为IAsyncResult)
收到的专用子系统(由VAL ar作为IAsyncResult)
如果需要,那么
调用(新的_onreceive(onreceive的地址),ar)
出口接头
如果结束
Dim client As Socket = ar.AsyncState
Try
client.EndReceive(ar)
Catch ex As Exception
End Try
Dim bytesRec As Byte() = byteData
Dim paket As String = System.Text.ASCIIEncoding.ASCII.GetString(bytesRec)
Dim temizip As String
temizip = Replace(paket, Chr(0), Chr(32))
temizip = temizip.Trim
Dim msg As String = temizip
Try
Dim boyut As Integer
boyut = msg(0) & msg(1)
boyut = boyut - 10
Dim externalip As String
externalip = msg.Remove(0, 2)
externalip = externalip.Remove(boyut, (externalip.Length - boyut))
If clientlist.Contains(externalip) Then
Else
clientlist.Add(externalip)
End If
Catch ex As Exception
End Try
Try
clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, New AsyncCallback(AddressOf OnRecieve),
客户端(套接字)
特例
End Try
AddClient(clientSocket)
End Sub
Delegate Sub _AddClient(ByVal client As Socket) 'delege used to invoke AddCLient()
Private Sub AddClient(ByVal client As Socket)
If InvokeRequired Then
Invoke(New _AddClient(AddressOf AddClient), client)
Exit Sub
End If
Dim lvi As New ListViewItem(client.LocalEndPoint.ToString)
lvi.Tag = client
ListBox1.Items.Add(client.RemoteEndPoint.ToString & " Bağlandı")
End Sub
End Try
End Sub
感谢我解决了这个问题的人,我为每个客户机声明新的clientsocket及其解决方案。
我只是从头代码中删除clientSocket变量,然后在每个线程上重新声明它。这里的要点很小,但是对于整数类型,
boyut=msg(0)&msg(1)
?将选项置于
上以修复这些小错误。你调试了你的OnReceive
事件了吗?当一个新的客户端连接服务器并停止在以前的客户端上侦听时,所有的tehm都工作正常,这方面有一个小错误。我需要同时开始接收所有客户。它将关闭以前的客户端并开始侦听新客户端。有关设置问题格式的帮助,请单击编辑器中的橙色问号。另外,请注意标记不是关键字。在标签列表中塞满与问题相同的单词(套接字、多个、客户端)无助于对其进行分类。务必阅读选择标签时出现的说明!