Go 绑定:无法在本地网络中的UDPclient上分配请求的地址

Go 绑定:无法在本地网络中的UDPclient上分配请求的地址,go,networking,server,udp,client,Go,Networking,Server,Udp,Client,由于我发现了许多如何编写go服务器和客户端的示例,这在一台机器上本地工作 现在我正在尝试在我的本地网络中在两台PC机之间进行通信,一台运行go服务器脚本,另一台运行客户端 但是,由于以下错误,我无法建立连接: 错误:侦听udp 192.168.11.6:10001:绑定:无法分配请求的地址 死机:运行时错误:无效内存地址或零指针取消引用 [信号0xb代码=0x1地址=0x0 pc=0x401376]/ 当然,我会发布我的代码(出现问题的客户端): 服务器: package main import

由于我发现了许多如何编写go服务器和客户端的示例,这在一台机器上本地工作

现在我正在尝试在我的本地网络中在两台PC机之间进行通信,一台运行go服务器脚本,另一台运行客户端

但是,由于以下错误,我无法建立连接:

错误:侦听udp 192.168.11.6:10001:绑定:无法分配请求的地址
死机:运行时错误:无效内存地址或零指针取消引用 [信号0xb代码=0x1地址=0x0 pc=0x401376]/

当然,我会发布我的代码(出现问题的客户端):

服务器:

package main
import (
    "fmt"
    "net"
    "os"
)

/* A Simple function to verify error */
func CheckError(err error) {
    if err  != nil {
        fmt.Println("Error: " , err)
        os.Exit(0)
    }
}

func main() {
    ServerAddr,err := net.ResolveUDPAddr("udp",":10001")
    CheckError(err)

    ServerConn, err := net.ListenUDP("udp", ServerAddr)
    CheckError(err)
    defer ServerConn.Close()

    buf := make([]byte, 1024)
    for {
        fmt.Println("Starting...")
        n,addr,err := ServerConn.ReadFromUDP(buf)
        fmt.Println("Received ",string(buf[0:n]), " from ",addr)
        ServerConn.WriteToUDP([]byte("hello there!"), addr)
        if err != nil {
            fmt.Println("Error: ",err)
        }
    }
}
客户端具有本地网络IP地址192.168.11.8和服务器192.168.11.6。它们还可以相互ping,当Windows要求时,我正在打开端口


我对所有的建议都很满意。我很难做到这一点,因为我只找到localhost server客户端go示例。

好的,我找到了。奇怪的是,我不得不允许应用程序在公共网络上通信?当我在我的家庭网络上时

我发现我不必在客户端打开套接字,而是使用
DialUDP

服务器还需要
ServerAddr,err:=net.ResolveUDPAddr(“udp”,“192.168.11.6:10001”)

改进的客户端代码:(main func)


客户端试图绑定到错误的地址。感谢您的回复@JimB-正确的地址是什么?我想我是在服务器的ip地址上侦听您的客户端正在尝试侦听的,就好像它是服务器一样。@MichaelHampton,UDP中没有客户端或服务器,您通常使用listen绑定UDP,因为拨号会创建“已连接”UDP套接字具有稍微不同的行为。我应该澄清一下,您也可以在两个端点上侦听套接字,如和。
package main
import (
    "fmt"
    "net"
    "os"
)

/* A Simple function to verify error */
func CheckError(err error) {
    if err  != nil {
        fmt.Println("Error: " , err)
        os.Exit(0)
    }
}

func main() {
    ServerAddr,err := net.ResolveUDPAddr("udp",":10001")
    CheckError(err)

    ServerConn, err := net.ListenUDP("udp", ServerAddr)
    CheckError(err)
    defer ServerConn.Close()

    buf := make([]byte, 1024)
    for {
        fmt.Println("Starting...")
        n,addr,err := ServerConn.ReadFromUDP(buf)
        fmt.Println("Received ",string(buf[0:n]), " from ",addr)
        ServerConn.WriteToUDP([]byte("hello there!"), addr)
        if err != nil {
            fmt.Println("Error: ",err)
        }
    }
}
ServerAddr, err := net.ResolveUDPAddr("udp", "192.168.11.6:10001")
CheckError(err)
buf := make([]byte, 1024)
Conn, err := net.DialUDP("udp", nil, ServerAddr)
CheckError(err)

defer Conn.Close()
i := 0
for {
    msg := strconv.Itoa(i)
    i++
    fmt.Printf(msg)
    n, err := Conn.Write([]byte(msg))
    CheckError(err)
    fmt.Printf("sent %d bytes", n)
    n, addr, err := Conn.ReadFromUDP(buf)
    if err == nil {
        fmt.Printf("%s %s\n", buf, addr)
    } else {
        fmt.Printf("some err %v\n", err)
    }
    time.Sleep(time.Second * 1)
}