Guest User

Untitled

a guest
Sep 15th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.64 KB | None | 0 0
  1. package main
  2.  
  3. import "encoding/gob"
  4. import "fmt"
  5. import "net"
  6. import "os"
  7.  
  8. type Netdata struct {
  9.     Type int
  10.     Data interface{}
  11. }
  12.  
  13. type Subdata struct {
  14.     IntField    int
  15.     StringField string
  16. }
  17.  
  18. func main() {
  19.     if os.Args[1] == "server" {
  20.         server("localhost:8011")
  21.     } else {
  22.         client("localhost:8011")
  23.     }
  24.  
  25. }
  26.  
  27. func server(listen string) {
  28.  
  29.     if netlisten, err := net.Listen("tcp", listen); err != nil {
  30.         fmt.Printf("Unable to listen on: %s (%s)", listen, err.Error())
  31.     } else {
  32.         defer netlisten.Close()
  33.         for {
  34.             if conn, err := netlisten.Accept(); err != nil {
  35.                 fmt.Printf("Connection DENIED on: %s (%s)\n", listen, err.Error())
  36.             } else {
  37.                 fmt.Printf("Connection accepted on: %s\n", listen)
  38.                 send_message(conn, "server")
  39.                 // recv_message(conn)
  40.             }
  41.         }
  42.     }
  43. }
  44.  
  45. func client(server string) {
  46.     if conn, err := net.Dial("tcp", server); err != nil {
  47.         fmt.Printf("Unable to connect to : %s\n", server)
  48.  
  49.     } else {
  50.         // Connected
  51.         fmt.Printf("Connected to : %s\n", server)
  52.  
  53.         // send_message(conn, "client")
  54.         recv_message(conn)
  55.  
  56.     }
  57.  
  58. }
  59.  
  60. func recv_message(conn net.Conn) {
  61.  
  62.     var data Netdata
  63.  
  64.     fmt.Printf("Receiving message... \n")
  65.     dec := gob.NewDecoder(conn)
  66.     if err := dec.Decode(&data); err != nil {
  67.         fmt.Printf("Error! %s\n", err.Error())
  68.     } else {
  69.         sd := data.Data.(Subdata)
  70.  
  71.         fmt.Printf("Data: %s\n", sd.StringField)
  72.     }
  73. }
  74.  
  75. func send_message(conn net.Conn, msg string) {
  76.  
  77.     // Server now sends something
  78.     sd := Subdata{IntField: 1, StringField: msg}
  79.     d := Netdata{Type: 0, Data: sd}
  80.  
  81.     fmt.Printf("Sending message... \n")
  82.     enc := gob.NewEncoder(conn)
  83.     enc.Encode(d)
  84.     fmt.Printf("Sent!\n")
  85. }
Add Comment
Please, Sign In to add comment