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

posted @ 2013-10-23 00:20  RockyF  阅读(593)  评论(0)    收藏  举报