VB中UdpClient向指定IP端口发数据失败且无异常抛出如何解决
问题根因
你的VB代码不能正常回传报文的核心问题是多余调用了UdpClient.Connect()方法,加上RemoteIpEndPoint初始化逻辑不规范,具体问题如下:
- UDP是无连接传输协议,不需要提前调用
Connect建立连接即可直接向指定端点发送报文 - 调用
Connect后再使用带远程端点参数的Send重载(也就是你代码里的三参数Send),.NET运行时会静默丢弃发送请求,不会抛出异常,符合你观测到的无报错但无回包的现象 - 你初始化
RemoteIpEndPoint时写死了本地服务IP和端口,这个参数是ByRef传递给Receive方法用于返回发送方的IP/端口,初始值应该设为任意IP+0端口,避免特殊场景下发送指向错误
修正后的代码
你只需要删掉udpClient.Connect(RemoteIpEndPoint)这一行,同时规范RemoteIpEndPoint的初始化即可,完整可运行代码如下:
Dim udpClient As New UdpClient(10000) ' 初始化接收端点用于返回发送方地址,不要写死固定IP端口 Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0) Dim receiveBytes As Byte() Dim returnData As String While True receiveBytes = udpClient.Receive(RemoteIpEndPoint) returnData = Encoding.ASCII.GetString(receiveBytes) Console.WriteLine($"{RemoteIpEndPoint.Address.ToString()}:{returnData}") Try If returnData.Contains("Loopback") Then ' 删掉多余的Connect调用,直接用三参数Send对应Python的sendto逻辑 Dim reply As Integer = udpClient.Send(receiveBytes, receiveBytes.Length, RemoteIpEndPoint) Console.WriteLine($"Replied:{reply.ToString()} to : {RemoteIpEndPoint.Address.ToString()}, Port: {RemoteIpEndPoint.Port.ToString()}") End If Catch ex As SocketException Console.WriteLine(ex.ErrorCode.ToString()) End Try End While
验证说明
修改后运行即可看到Wireshark捕获到回传报文,功能和Python脚本完全一致:
- 绑定本地10000端口监听UDP报文
- 收到报文后校验是否包含
Loopback关键词 - 校验通过直接将原始字节回传给发送方的IP和端口
内容的提问来源于stack exchange,提问作者ALUM22
相关产品推荐
相关产品推荐

