You need to enable JavaScript to run this app. VB中UdpClient向指定IP端口发数据失败且无异常抛出如何解决
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 18:48:02