参考: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一般使用方式相关推荐

  1. golang TCP Socket编程

    Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分.在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均 ...

  2. Golang实现socket编程

    Golang实现socket编程 1. socket 1.1 socket基本特性 Socket起源于Unix,而Unix基本哲学之一就是"一切皆文件",都可以用"打开o ...

  3. go实现文件服务器,golang文件服务器的两种方式(可以访问任何目录)

    一.方法1: 主要用到的方法是http包的FileServer,参数很简单,就是要路由的文件夹的路径. package main import ( "fmt" "net/ ...

  4. 【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)

    文章目录 一.前言 二.Go开发环境搭建(Windows系统) 1.安装Go命令行工具 2.创建GoWorkspace目录 3.配置GOPATH环境变量 4.配置GOPROXY代理 5.安装VSCod ...

  5. Golang获取命令行参数的方式

    1.介绍 当我们希望通过命令行启动Golang程序,获取输入的各种形式参数时,该如何处理呢? 2.os.Args os.Args是一个string的切片,用来存储所有的命令行参数,包括go run m ...

  6. 在Silverlight中使用Socket进行通信(1)Socket请求-回复方式的简易数据交换

    很久之前用过Socket,由于近期项目需要用socket传输视频流,早上花了半小时回顾了一下. Socket类简要介绍 socket下提供的主要类有四个,分别是socket,tcpclient,tcp ...

  7. linux go 连接oracle,Ubuntu14下golang连接oracle11g (OCI12.1方式)

    最近业务需求连接oracle,把过程记录下来,给大家分享,已测试通过 1.下载及安装oracle instantclient12.1: $ sudo alien -i oracle-instantcl ...

  8. golang 入门--定义数组的方式

    1.定义 var 名称 [长度]数据类型 示例: // 先定义 var a [3]int// 再赋值 a[0] = 20 a[1] = 50 a[2] = 40fmt.Println(a) 2.隐式定 ...

  9. 使用Retrofit的方式请求Socket,且Socket可以和Http无缝切换

    前言 一般来说前端的app和服务器通讯都是用的Http,Http使用方便,请求流程好控制,但有时候app需要实时接收服务端的推送或保持长连接,这时就需要使用Socket了 java提供的Socket接 ...

最新文章

  1. java中json重复数据结构_怎么将有JSON中有相同值放在一组?
  2. Docker 1.13 管理命令
  3. LaTeX入门第二集!LaTeX的几个示例!
  4. PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 47784 pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYS
  5. 【Demo】改变SO项目状态并取消拒绝原因实现
  6. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——1.6 将吉他谱伴奏,转换成MIDI音乐伴奏...
  7. NIM的完整形式是什么?
  8. mysql多数据源切换_CI 多数据库操作 切换数据库
  9. 简单php修改mysql数据类型_MySQL入门很简单—MySQL数据类型
  10. java rpg对战_java实现模拟RPG格斗
  11. 中国移动Cmpp java实现_CMPP-java 中国移动CMPP协议java开发包 - 下载 - 搜珍网
  12. 利用JavaScript完成页面定时弹出广告
  13. rockbox主题包安装_RockBox 安装使用参考
  14. pairing-friendly曲线家族
  15. 程序员常用资源工具集合【建议收藏】
  16. LVGL8的窗口切换方式
  17. B站投资,不务正业?
  18. 重做日志文件(redo log file)
  19. 大三保研夏令营须知及前期准备工作
  20. 移动硬盘读不出来的处理办法

热门文章

  1. Javaspring 14-18课 spring AOP
  2. Tr A 矩阵快速幂
  3. 推荐几个值得关注的爬虫库
  4. 数据结构实验 3.抓住那头牛
  5. 数据结构(字符串)—— 循环旋转字符串的判断
  6. 《南溪的python灵隐笔记》——有趣的Munch字典库
  7. 使用tensorflow-serving部署tensorflow模型
  8. 贪吃蛇大作战游戏攻略
  9. Java阶段测试题一
  10. 201521123083《Java程序设计》第11周学习总结