qq_44740310 2024-12-20 12:01 采纳率: 0%
浏览 15

go语言 在windows上的udp问题

package main

import (
    "fmt"
    "net"
    "strconv"
    "time"
)

func main() {
    var serverAddr = "127.0.0.1:10080"
    // 创建一个UDP地址
    udpAddr, err := net.ResolveUDPAddr("udp", serverAddr)
    if err != nil {
        fmt.Println("Error resolving address:", err)
        return
    }

    // 创建接收端,绑定到任意可用端口
    connRecv, err := net.ListenUDP("udp", &net.UDPAddr{Port: 10080, IP: net.ParseIP("127.0.0.1")})
    if err != nil {
        fmt.Println("Error listening:", err)
        return
    }
    defer connRecv.Close()

    // 启动一个goroutine来接收数据
    go func() {
        buf := make([]byte, 1024)
        for {
            n, _, err := connRecv.ReadFromUDP(buf)
            if err != nil {
                fmt.Println("Error reading from UDP:", err)
                continue
            }
            fmt.Printf("Received: %s\n", string(buf[:n]))
        }
    }()

    // 创建发送端,连接到目标地址
    connSend, err := net.DialUDP("udp", nil, udpAddr)
    if err != nil {
        fmt.Println("Error dialing:", err)
        return
    }
    defer connSend.Close()

    for i := 0; i < 50000; i++ {
        // 发送数据
        message := []byte("Hello from client " + strconv.Itoa(i))
        _, err = connSend.Write(message)
        if err != nil {
            fmt.Println("Error sending data:", err)
            return
        }
        time.Sleep(time.Microsecond)

    }

    // 等待一段时间,让接收端有时间接收数据
    time.Sleep(time.Second * 15)
}

上面是go语言的问题:
本机的windows10 系统 Error reading from UDP: read udp 127.0.0.1:10080: wsarecvfrom: The system cannot find the file specified. 但在另外一个windows10 上是正常的请问为什么呢?

情况: 在本机使用PHP的socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 是可以的,就是go用上面的代码编译就是有 Error reading from UDP: read udp 127.0.0.1:10080: wsarecvfrom: The system cannot find the file specified. 。

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个问题可能是由于一些系统配置或环境问题导致的。从你的描述来看,这个错误出现在一台特定的Windows 10系统上,而其他系统上没有这个问题。这里有几个可能的原因和解决方案:

    防火墙或安全软件设置

    有可能是防火墙或安全软件阻止了UDP通信。你可以尝试暂时禁用防火墙或安全软件来测试是否是这个问题。如果是,你可能需要调整防火墙规则以允许UDP通信。在某些情况下,还需要配置操作系统的出站规则来允许UDP流量。确保规则包括了你的应用程序所使用的端口(在这种情况下是端口号10080)。

    Go的网络设置或依赖库问题

    可能是Go的网络库或其依赖在某些特定环境下存在问题。你可以尝试更新Go到最新版本,看看问题是否得到解决。此外,确保你的Go环境正确配置并适用于Windows系统。有时候,某些库可能需要特定的环境配置或依赖项。

    系统配置问题

    某些系统配置可能会影响网络操作。例如,网络堆栈配置、路由表设置等。你可以检查这些设置是否有所不同,特别是在有问题的系统和正常工作系统之间。如果你不确定如何检查这些设置,你可能需要寻求专业的技术支持来帮助你诊断问题。

    代码问题

    虽然你的代码看起来是正确的,但有时候问题可能就在代码中某个不明显的地方。确保你在处理网络连接时的所有错误处理逻辑都是正确的,并确保网络连接正确创建和关闭。如果可能的话,你可以尝试简化代码,只保留最基本的UDP通信逻辑,看看问题是否仍然存在。

    环境差异

    由于在不同的Windows系统上表现不同,也有可能是两个系统的环境差异导致的。例如,一些安全软件、系统更新或其他配置可能会导致这种差异。尝试在两个系统上安装相同的软件和配置,看看问题是否得到解决。如果可能的话,尝试在两个系统上运行相同的测试环境来进一步诊断问题。

    总的来说,这个问题可能需要一些调试和诊断来确定具体原因。建议从检查防火墙和安全软件设置开始,然后逐步排查其他可能的因素。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月20日