分享
GO语言练习:网络编程 TCP 示例
fengbohello · · 2809 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
1、代码
2、编译及运行
1、网络编程 TCP 示例 simplehttp.go 代码
1 package main 2 3 import ( 4 "net" 5 "os" 6 "io" 7 "bytes" 8 "fmt" 9 ) 10 11 func main() { 12 if len(os.Args) != 2 { 13 fmt.Fprintf(os.Stderr, "Usage : %s host:port", os.Args[0]) 14 os.Exit(1) 15 } 16 service := os.Args[1] 17 conn, err := net.Dial("tcp", service) 18 checkError(err) 19 20 _, err = conn.Write([]byte("HEAD / HTTPD/1.0\r\n\r\n")) 21 checkError(err) 22 23 result, err := readFully(conn) 24 checkError(err) 25 26 fmt.Println(string(result)) 27 28 os.Exit(0) 29 } 30 31 func checkError(err error) { 32 if err != nil { 33 fmt.Fprintf(os.Stderr, "Fatal error : %s\n", err.Error()) 34 os.Exit(1) 35 } 36 } 37 38 func readFully(conn net.Conn) ([]byte, error) { 39 defer conn.Close() 40 41 result := bytes.NewBuffer(nil) 42 var buf [512]byte 43 for { 44 n, err := conn.Read(buf[0:]) 45 result.Write(buf[0:n]) 46 if err != nil { 47 if err == io.EOF { 48 fmt.Println("over...") 49 break 50 } 51 return nil, err 52 } 53 } 54 55 return result.Bytes(), nil 56 }
2、编译及运行
2.1)编译
$ go build simplehttp.go
$ ls
simplehttp simplehttp.go
2.2)运行
$ ./simplehttp www.xin3e.com:80 over... HTTP/1.1 302 Found Date: Mon, 20 Jul 2015 15:18:13 GMT Server: Apache/2.2.22 (Ubuntu) X-Powered-By: PHP/5.3.10-1ubuntu3.19 Location: web/index.php Vary: Accept-Encoding Connection: close Content-Type: text/html
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2809 次点击
下一篇:让我们一起Go(十)
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
1、代码
2、编译及运行
1、网络编程 TCP 示例 simplehttp.go 代码
1 package main 2 3 import ( 4 "net" 5 "os" 6 "io" 7 "bytes" 8 "fmt" 9 ) 10 11 func main() { 12 if len(os.Args) != 2 { 13 fmt.Fprintf(os.Stderr, "Usage : %s host:port", os.Args[0]) 14 os.Exit(1) 15 } 16 service := os.Args[1] 17 conn, err := net.Dial("tcp", service) 18 checkError(err) 19 20 _, err = conn.Write([]byte("HEAD / HTTPD/1.0\r\n\r\n")) 21 checkError(err) 22 23 result, err := readFully(conn) 24 checkError(err) 25 26 fmt.Println(string(result)) 27 28 os.Exit(0) 29 } 30 31 func checkError(err error) { 32 if err != nil { 33 fmt.Fprintf(os.Stderr, "Fatal error : %s\n", err.Error()) 34 os.Exit(1) 35 } 36 } 37 38 func readFully(conn net.Conn) ([]byte, error) { 39 defer conn.Close() 40 41 result := bytes.NewBuffer(nil) 42 var buf [512]byte 43 for { 44 n, err := conn.Read(buf[0:]) 45 result.Write(buf[0:n]) 46 if err != nil { 47 if err == io.EOF { 48 fmt.Println("over...") 49 break 50 } 51 return nil, err 52 } 53 } 54 55 return result.Bytes(), nil 56 }
2、编译及运行
2.1)编译
$ go build simplehttp.go
$ ls
simplehttp simplehttp.go
2.2)运行
$ ./simplehttp www.xin3e.com:80 over... HTTP/1.1 302 Found Date: Mon, 20 Jul 2015 15:18:13 GMT Server: Apache/2.2.22 (Ubuntu) X-Powered-By: PHP/5.3.10-1ubuntu3.19 Location: web/index.php Vary: Accept-Encoding Connection: close Content-Type: text/html