Unity3D 网络库使用 UDP 并具有用于 RPC 调用的方法。我试图让我的服务器通过 UDP 使用 RPC,但我遇到了一些麻烦。这是我现在得到的基本服务器代码:type Args struct { X, Y int}type RequestHandler struct{}func (self *RequestHandler) Add(args *Args, reply *int) error { *reply = args.X + args.Y return nil}func main() { addr := net.UDPAddr{ Port: 5127, IP: net.ParseIP("127.0.0.1") } handler := new(RequestHandler) rpc.Register(handler) conn, err := net.ListenUDP("udp", &addr) defer conn.Close() if err != nil { panic(err) } for { go rpc.ServeConn(conn) }}这是客户端代码:type Args struct { X, Y int}func main() { client, err := rpc.Dial("udp", "127.0.0.1:5127") if err != nil { log.Fatal("dialing:", err) } // Synchronous call args := &Args{7,8} var reply int err = client.Call("RequestHandler.Add", args, &reply) if err != nil { log.Fatal("arith error:", err) } fmt.Printf("Result: %d + %d = %d", args.X, args.Y, reply)}当我运行这些时,它们都挂了,什么也没发生。我究竟做错了什么?
1 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
由于 UDP 套接字的性质,基于 UDP 的 RPC 需要特殊的 UDP 感知处理。
没有连接,只是发送到一个地址的数据报。
为了让客户端得到回复,它必须设置一个监听套接字,然后将它与请求一起发送到服务器。然后服务器将回复客户端地址。
net/rpc 对非面向连接的传输(即:UDP)没有任何特殊情况处理
我不知道有任何实现无连接 RPC for go 的包,因此您可能必须在这里推出自己的包。
- 1 回答
- 0 关注
- 369 浏览
添加回答
举报
0/150
提交
取消