Golang Socket通信测试
1 package main 2 3 import ( 4 "code.google.com/p/mahonia" 5 "fmt" 6 "net" 7 "os" 8 "strings" 9 ) 10 11 func main() { 12 args := os.Args 13 if len(args) < 2 { 14 fmt.Println(Show("输入的参数不正确,请重新输入.\r\n可选参数server或client")) 15 os.Exit(0) 16 } 17 param := strings.ToLower(args[1]) 18 if param == "server" { 19 Server() 20 } else if param == "client" { 21 Client() 22 } else { 23 fmt.Println(Show("输入的参数不正确,请重新输入.\r\n可选参数server或client")) 24 os.Exit(0) 25 } 26 } 27 28 func Show(s string) string { 29 enc := mahonia.NewEncoder("gbk") 30 return enc.ConvertString(s) 31 } 32 33 func Server() { 34 exit := make(chan bool) 35 ip := net.ParseIP("127.0.0.1") 36 addr := net.TCPAddr{ip, 8888} 37 go func() { 38 listen, err := net.ListenTCP("tcp", &addr) 39 if err != nil { 40 fmt.Println(Show("初始化失败"), Show(err.Error())) 41 exit <- true 42 return 43 } 44 fmt.Println(Show("正在监听...")) 45 for { 46 client, err := listen.AcceptTCP() 47 if err != nil { 48 fmt.Println(err.Error()) 49 continue 50 } 51 fmt.Println(Show("客户端连接"), Show(client.RemoteAddr().String())) 52 data := make([]byte, 1024) 53 c, err := client.Read(data) 54 if err != nil { 55 fmt.Println(Show(err.Error())) 56 } 57 fmt.Println(Show(string(data[0:c]))) 58 client.Write([]byte("你好客户端!\r\n")) 59 client.Close() 60 } 61 }() 62 <-exit 63 fmt.Println(Show("服务端关闭!")) 64 } 65 66 func Client() { 67 client, err := net.Dial("tcp", "127.0.0.1:8888") 68 if err != nil { 69 fmt.Println(Show("服务端连接失败"), Show(err.Error())) 70 return 71 } 72 defer client.Close() 73 client.Write([]byte("你好,服务端!")) 74 buf := make([]byte, 1024) 75 c, err := client.Read(buf) 76 if err != nil { 77 fmt.Println(err.Error()) 78 return 79 } 80 fmt.Println(Show(string(buf[0:c]))) 81 }
原文:http://outofmemory.cn/code-snippet/1335/Golang-Socket-correspond-test

浙公网安备 33010602011771号