Go 绑定:无法在本地网络中的UDPclient上分配请求的地址
由于我发现了许多如何编写go服务器和客户端的示例,这在一台机器上本地工作 现在我正在尝试在我的本地网络中在两台PC机之间进行通信,一台运行go服务器脚本,另一台运行客户端 但是,由于以下错误,我无法建立连接: 错误:侦听udp 192.168.11.6:10001:绑定:无法分配请求的地址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
死机:运行时错误:无效内存地址或零指针取消引用 [信号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)
}