我采用并改编了Golang RPC 中的示例,制作了一个简单的 RPC 服务器,作为我想要完成的实际任务的测试运行。但无论我尝试过什么,我最终都会让客户得到2014/03/21 13:28:41 dialing: dial-http tcp MYPC:61740: unexpected HTTP response: 404 Not Found我已经尝试使用MYPC:0,127.0.0.1:61470,MYPC:61470以及主题为服务器的其他变体。也在本地和两台不同的计算机上尝试过(注意我在 Windows 上使用的是 Go 1.2)。通常使用 Go 我发现它可以直接调试,但即使阅读 rpc pacakge 的源代码这次也无济于事 - 但是我确实掌握了 :0 提供可用端口的技巧。服务器可以通过运行exe运行,客户端可以通过服务器输出的端口运行 chat -c -server=127.0.0.1:8082。以下代码实际上有什么问题?package mainimport ("flag""log""net""net/http""net/rpc")type Chat stringfunc (t *Chat) Msg(msg string, bytes *int) error { *bytes = len(msg) return nil}func main() { server := flag.String("server", "", "Server and port") client := flag.Bool("c", false, "Make me a client") flag.Parse() log.Println("Server: ", *server) if !(*client) { chat := new(Chat) rpc.Register(chat) l, e := net.Listen("tcp", *server) if e != nil { log.Fatal("listen error:", e) } log.Println(l.Addr().String()) go rpc.Accept(l) http.Serve(l, nil) } else { log.Println("Client connecting to", *server) // !! The error occurs here client, err := rpc.DialHTTP("tcp", *server) if err != nil { log.Fatal("dialing: ", err) } var reply int err = client.Call("Chat.Msg", "Make it so!", &reply) if err != nil { log.Fatal("chat error:", err) } log.Println("Msg: returned", reply)}}
1 回答
一只斗牛犬
TA贡献1784条经验 获得超2个赞
我认为您在 rpc.Register(chat) 之后缺少 rpc.HandleHTTP()。尝试将您的代码更改为
...
rpc.Register(chat)
rpc.HandleHTTP()
...
它以这种方式对我有用,我得到了
2014/03/20 18:31:21 Server: localhost:55209
2014/03/20 18:31:21 Client connecting to localhost:55209
2014/03/20 18:31:21 Msg: returned 11
而你不需要go rpc.Accept(l). 至少对我来说,它在没有这条线的情况下工作。
- 1 回答
- 0 关注
- 246 浏览
添加回答
举报
0/150
提交
取消