内容简介:tcp/udp ip通信是当前重要的通信方式。当然对于golang开发者而言,实现tcp通信也是必要的。本文的内容主要是基于《Go语言四十二章经》简书地址:本文的例子分为服务端与客户端两部分:
tcp/udp ip通信是当前重要的通信方式。
当然对于golang开发者而言,实现tcp通信也是必要的。本文的内容主要是基于《Go语言四十二章经》简书地址: https://www.jianshu.com/nb/29056963 的详细讲解
本文的例子分为服务端与客户端两部分:
服务端:
package main import ( "bufio" "fmt" "io" "net" "time" ) //tcp server 服务端代码 func main() { //定义一个tcp断点 var tcpAddr *net.TCPAddr //通过ResolveTCPAddr实例一个具体的tcp断点 tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9999") //打开一个tcp断点监听 tcpListener,_ := net.ListenTCP("tcp",tcpAddr) defer tcpListener.Close() fmt.Println("Server ready to read ...") //循环接收客户端的连接,创建一个协程具体去处理连接 for{ tcpConn,err := tcpListener.AcceptTCP() if err!=nil { fmt.Println(err) continue } fmt.Println("A client connected :" +tcpConn.RemoteAddr().String()) go tcpPipe(tcpConn) } } //具体处理连接过程方法 func tcpPipe(conn *net.TCPConn){ //tcp连接的地址 ipStr := conn.RemoteAddr().String() defer func() { fmt.Println(" Disconnected : " + ipStr) conn.Close() }() //获取一个连接的reader读取流 reader := bufio.NewReader(conn) i:=0 //接收并返回消息 for { message,err := reader.ReadString('\n') if err!=nil || err == io.EOF { break } fmt.Println(string(message)) time.Sleep(time.Second*3) msg := time.Now().String() + conn.RemoteAddr().String() + " Server Say hello! \n" b := []byte(msg) conn.Write(b) i++ if i>10 { break } } }
客户端
package main import ( "bufio" "fmt" "io" "net" "time" ) func main() { var tcpAddr *net.TCPAddr tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9999") conn,err := net.DialTCP("tcp",nil,tcpAddr) if err!=nil { fmt.Println("Client connect error ! " + err.Error()) return } defer conn.Close() fmt.Println(conn.LocalAddr().String() + " : Client connected!") onMessageReceived(conn) } func onMessageReceived(conn *net.TCPConn) { reader := bufio.NewReader(conn) b := []byte(conn.LocalAddr().String() + " Say hello to Server... \n") conn.Write(b) for { msg, err := reader.ReadString('\n') fmt.Println("ReadString") fmt.Println(msg) if err != nil || err == io.EOF { fmt.Println(err) break } time.Sleep(time.Second * 2) fmt.Println("writing...") b := []byte(conn.LocalAddr().String() + " write data to Server... \n") _, err = conn.Write(b) if err != nil { fmt.Println(err) break } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- golang 实现的一个遗传算法的例子
- Colly源码解析——结合例子分析底层实现
- 初识Kubernetes(K8s):从一个单机部署实现Java Web应用例子开始
- 一个例子了解迁移学习
- oracle审计例子
- 弹性盒模型常见例子
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
How to Solve It
Zbigniew Michalewicz、David B. Fogel / Springer / 2004-03-01 / USD 59.95
This book is the only source that provides comprehensive, current, and detailed information on problem solving using modern heuristics. It covers classic methods of optimization, including dynamic pro......一起来看看 《How to Solve It》 这本书的介绍吧!
RGB HSV 转换
RGB HSV 互转工具
RGB CMYK 转换工具
RGB CMYK 互转工具