Golang的socket一般使用方式
参考:https://astaxie.gitbooks.io/build-web-application-with-golang/zh/08.1.html
客户端
操作步骤:
- 确定服务器的IP和端口号
- 建立TCP连接
- 向服务器发送请求
- 接收请求
服务端
操作步骤:
- 确定监听的端口号
- 启动TCP监听
- 接收客户端的请求
- 返回数据(可以在单独的协程中完成)
代码实例
客户端:
package mainimport("net""os""fmt""io/ioutil"
)func main(){if len(os.Args)!=2{fmt.Println(os.Stderr,"Usage:%s host:port ",os.Args[0])os.Exit(1)}service:=os.Args[1]tcpAddr,err:=net.ResolveTCPAddr("tcp4",service) conn,err:=net.DialTCP("tcp",nil,tcpAddr)checkErr(err)_,err=conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))checkErr(err)result,err:=ioutil.ReadAll(conn)checkErr(err)fmt.Println(string(result))os.Exit(0)
}func checkErr(err error){if err!=nil{fmt.Fprintf(os.Stderr,"Fatal error: %s\n",err.Error())os.Exit(1)}
}
服务端:
package mainimport("fmt""net""os""time"
)func main(){service:=":7777"tcpAddr,err:=net.ResolveTCPAddr("tcp4",service)checkErr(err)listener,err:=net.ListenTCP("tcp",tcpAddr)checkErr(err)for{conn,err:=listener.Accept()if err!=nil{continue;}go handleClient(conn)}
}func checkErr(err error){if err!=nil{fmt.Fprintf(os.Stderr,"Fatal error: %s",err.Error())}
}func handleClient(conn net.Conn){defer conn.Close()daytime:=time.Now().String()conn.Write([]byte(daytime))
}
Golang的socket一般使用方式相关推荐
- golang TCP Socket编程
Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分.在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均 ...
- Golang实现socket编程
Golang实现socket编程 1. socket 1.1 socket基本特性 Socket起源于Unix,而Unix基本哲学之一就是"一切皆文件",都可以用"打开o ...
- go实现文件服务器,golang文件服务器的两种方式(可以访问任何目录)
一.方法1: 主要用到的方法是http包的FileServer,参数很简单,就是要路由的文件夹的路径. package main import ( "fmt" "net/ ...
- 【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)
文章目录 一.前言 二.Go开发环境搭建(Windows系统) 1.安装Go命令行工具 2.创建GoWorkspace目录 3.配置GOPATH环境变量 4.配置GOPROXY代理 5.安装VSCod ...
- Golang获取命令行参数的方式
1.介绍 当我们希望通过命令行启动Golang程序,获取输入的各种形式参数时,该如何处理呢? 2.os.Args os.Args是一个string的切片,用来存储所有的命令行参数,包括go run m ...
- 在Silverlight中使用Socket进行通信(1)Socket请求-回复方式的简易数据交换
很久之前用过Socket,由于近期项目需要用socket传输视频流,早上花了半小时回顾了一下. Socket类简要介绍 socket下提供的主要类有四个,分别是socket,tcpclient,tcp ...
- linux go 连接oracle,Ubuntu14下golang连接oracle11g (OCI12.1方式)
最近业务需求连接oracle,把过程记录下来,给大家分享,已测试通过 1.下载及安装oracle instantclient12.1: $ sudo alien -i oracle-instantcl ...
- golang 入门--定义数组的方式
1.定义 var 名称 [长度]数据类型 示例: // 先定义 var a [3]int// 再赋值 a[0] = 20 a[1] = 50 a[2] = 40fmt.Println(a) 2.隐式定 ...
- 使用Retrofit的方式请求Socket,且Socket可以和Http无缝切换
前言 一般来说前端的app和服务器通讯都是用的Http,Http使用方便,请求流程好控制,但有时候app需要实时接收服务端的推送或保持长连接,这时就需要使用Socket了 java提供的Socket接 ...
最新文章
- java中json重复数据结构_怎么将有JSON中有相同值放在一组?
- Docker 1.13 管理命令
- LaTeX入门第二集!LaTeX的几个示例!
- PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 47784 pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYS
- 【Demo】改变SO项目状态并取消拒绝原因实现
- 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——1.6 将吉他谱伴奏,转换成MIDI音乐伴奏...
- NIM的完整形式是什么?
- mysql多数据源切换_CI 多数据库操作 切换数据库
- 简单php修改mysql数据类型_MySQL入门很简单—MySQL数据类型
- java rpg对战_java实现模拟RPG格斗
- 中国移动Cmpp java实现_CMPP-java 中国移动CMPP协议java开发包 - 下载 - 搜珍网
- 利用JavaScript完成页面定时弹出广告
- rockbox主题包安装_RockBox 安装使用参考
- pairing-friendly曲线家族
- 程序员常用资源工具集合【建议收藏】
- LVGL8的窗口切换方式
- B站投资,不务正业?
- 重做日志文件(redo log file)
- 大三保研夏令营须知及前期准备工作
- 移动硬盘读不出来的处理办法