当前位置: 首页 > news >正文

GO语言练习:网络编程 TCP 示例

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

 

转载于:https://www.cnblogs.com/fengbohello/p/4663077.html

相关文章:

  • “梳子”的用途很大
  • Linux监控本机当前状态命令
  • eclipse中svn的各种状态图标详解
  • 201507221403_《backbone之一——新建模型和集合、实例化模型、模型上监听事件的方法、模型设置和获取后台数据、配置理由方法、视图绑定事件的方法、绑定模型等》...
  • Android HAL实例解析
  • 15款优秀移动APP产品原型设计工具
  • ThreadPoolExecutor运转机制详解
  • 图片垂直居中在中间
  • MeeGo handset 1.1开发环境[5]:一个desktop小应用
  • Java虚拟机学习 - 对象访问
  • 20款Notepad++插件下载和介绍
  • ios协议
  • UIComponent的生命周期(life cycle)
  • spring(一)IOC AOP
  • 深入分析Flex [Bindable] 以及使用方法
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Consul Config 使用Git做版本控制的实现
  • cookie和session
  • HashMap ConcurrentHashMap
  • Java Agent 学习笔记
  • JAVA之继承和多态
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Sass Day-01
  • sublime配置文件
  • windows-nginx-https-本地配置
  • 编写高质量JavaScript代码之并发
  • 反思总结然后整装待发
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 记一次用 NodeJs 实现模拟登录的思路
  • 让你的分享飞起来——极光推出社会化分享组件
  • 手写一个CommonJS打包工具(一)
  • 微信小程序:实现悬浮返回和分享按钮
  • 我的zsh配置, 2019最新方案
  • 学习笔记TF060:图像语音结合,看图说话
  • 一道闭包题引发的思考
  • 优秀架构师必须掌握的架构思维
  • 数据库巡检项
  • #100天计划# 2013年9月29日
  • #vue3 实现前端下载excel文件模板功能
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (1)虚拟机的安装与使用,linux系统安装
  • (4)事件处理——(7)简单事件(Simple events)
  • (poj1.2.1)1970(筛选法模拟)
  • (poj1.3.2)1791(构造法模拟)
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)理解angular中的module和injector,即依赖注入
  • *1 计算机基础和操作系统基础及几大协议
  • .Net Remoting常用部署结构
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET开源快速、强大、免费的电子表格组件
  • @SuppressWarnings(unchecked)代码的作用
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [20170728]oracle保留字.txt