gpt4 book ai didi

go - 绑定(bind) : cannot assign requested address on UDPclient in local network

转载 作者:IT王子 更新时间:2023-10-29 02:10:09 26 4
gpt4 key购买 nike

因为我找到了很多如何编写 go 服务器和客户端的示例,所以这可以在一台机器上本地运行。

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

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

Error: listen udp 192.168.11.6:10001: bind: cannot assign requested address
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x401376] // ...

当然会贴出我的代码(客户端,出问题的地方):

package main

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

func CheckError(err error) {
if err != nil {
fmt.Println("Error: ", err)
}
}

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

Conn, err := net.ListenUDP("udp", ServerAddr)
CheckError(err)

defer Conn.Close()
i := 0
for {
msg := strconv.Itoa(i)
i++
buf := []byte(msg)
_, err = Conn.WriteToUDP(buf, ServerAddr)
time.Sleep(time.Second * 1)
}
}

服务器:

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 服务器客户端 go 示例。

最佳答案

好吧,我明白了。奇怪的是我必须允许该应用程序在公共(public)网络上进行通信?当我在我的家庭网络上时。 When starting the server - I had to enable public networks

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

服务器还需要完整的IP地址
ServerAddr,err := net.ResolveUDPAddr("udp","192.168.11.6:10001")

改进的客户端代码:(主要功能)

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)
}

关于go - 绑定(bind) : cannot assign requested address on UDPclient in local network,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49084609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com