服务端
package main
import (
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
type HelloWord struct {
}
func (this *HelloWord) SayHello(name string, revc *string) error {
*revc = name + " 你好啊!"
return nil
}
func main() {
// 注册一个rpc服务
err := rpc.RegisterName("Hello", &HelloWord{})
if err != nil {
fmt.Println("注册rpc失败",err)
return
}
// 启动tcp监听
lisert, err := net.Listen("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("启动监听错误",err)
return
}
fmt.Println("等待客户端连接")
// 创建tcp连接
conn, err := lisert.Accept()
if err != nil {
fmt.Println("创建连接错误")
return
}
// 将链接转给rpc解析收数据
//rpc.ServeConn(conn)
jsonrpc.ServeConn(conn)
defer lisert.Close()
defer conn.Close()
}
客户端
package main
import (
"fmt"
"net/rpc/jsonrpc"
)
func main() {
// 连接服务端
server, err := jsonrpc.Dial("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("连接服务端失败")
return
}
// 创建一个参数来接受远程函数的返回值
var reply string
//调用远程函数
server.Call("Hello.SayHello", "张三", &reply)
fmt.Println(reply)
defer server.Close()
}