lesson7/

directory
v0.0.0-...-70b045a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 3, 2018 License: MIT

README

homework 7

如下示例是一个RPC调用,server能执行client发来的命令并返回执行结果。
请把客户端改造成可以并发向多个server发送命令并返回结果的模式

RPC客户端

package main

import (
	"bufio"
	"log"
	"net/rpc"
	"os"
	"fmt"
)

func main() {
	client, err := rpc.Dial("tcp", "localhost:42586")
	if err != nil {
		log.Fatal(err)
	}

	in := bufio.NewReader(os.Stdin)
	for {
		line, _, err := in.ReadLine()
		if err != nil {
			log.Fatal(err)
		}
		var reply string
		err = client.Call("Listener.GetLine", line, &reply)
		if err != nil {
			log.Fatal(err)
		}
		fmt.Println(reply)
	}
}

RPC服务端

package main

import (
	"fmt"
	"log"
	"net"
	"net/rpc"
	"os/exec"
)

type Listener int

func (l *Listener) GetLine(line []byte, ack *string) error {
	fmt.Println(string(line))
	cmd := exec.Command("sh", "-c", string(line))
	//cmd.Run()
	var out []byte
	var err error
	if out, err = cmd.CombinedOutput(); err != nil {
		log.Fatal(err)
	}

	ll := string(out)
	*ack = ll
	return nil
}

func main() {
	addy, err := net.ResolveTCPAddr("tcp", "0.0.0.0:42586")
	if err != nil {
		log.Fatal(err)
	}

	inbound, err := net.ListenTCP("tcp", addy)
	if err != nil {
		log.Fatal(err)
	}

	listener := new(Listener)
	rpc.Register(listener)
	rpc.Accept(inbound)
}

Directories

Path Synopsis
pc
rpc
seerjk
zhangliyuan

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL