Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "flag"
- "strings"
- "github.com/golang/protobuf/proto"
- "probuf"
- "net"
- "io/ioutil"
- )
- func main() {
- test := &probuf.Car{
- CarMake: proto.String("Isuzu"),
- CarModel: proto.String("trooper"),
- }
- data , _ := proto.Marshal(test)
- fmt.Println("program starting")
- fmt.Println(data)
- newdata := &probuf.Car{}
- proto.Unmarshal(data, newdata)
- fmt.Println(newdata)
- server := flag.String("server", "yes", "-server yes create rpc server | -server no create rpc client")
- flag.Parse()
- switch strings.ToLower(*server){
- case "yes" :
- rpcServer()
- case "no" :
- rpcClient()
- default:
- fmt.Println("must user server flag")
- }
- }
- func rpcServer(){
- l, err := net.Listen("tcp", ":8000")
- if err != nil {
- panic("server failed")
- }
- for {
- fmt.Println("server running")
- c, err := l.Accept()
- if err != nil {
- panic("no request accepter")
- }
- defer l.Close()
- go func(c net.Conn){
- defer c.Close()
- data, err := ioutil.ReadAll(c)
- if err != nil {
- panic("read error")
- }
- a := &probuf.Car{}
- proto.Unmarshal(data, a)
- fmt.Println(a)
- }(c)
- }
- }
- func rpcClient(){
- fmt.Println("rpc client running")
- jeep := &probuf.Car{
- CarMake: proto.String("jeep"),
- CarModel: proto.String("cherokee"),
- }
- data, _ := proto.Marshal(jeep)
- transferData(data)
- }
- func transferData(data []byte){
- c, err := net.Dial("tcp","127.0.0.1:8000")
- if err != nil {
- panic("could not write data")
- }
- defer c.Close()
- c.Write(data)
- }
- //protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/addressbook.proto
Add Comment
Please, Sign In to add comment