golang中net的tcp服务使用
作者:zhijie
这篇文章主要介绍了golang中net的tcp服务使用,文章通过服务端监听端口 展开主题的详细内容,具有一定的参考价值,需要的 小伙伴可以参考一下
服务端监听端口 listen()
方法:net.listen({监听类型},{监听的ip和端口})(conn, err){}
返回值:conn
是监听的对象,有获取消息关闭监听等方法err
错误信息,如果没有错误信息值为nil
import ("net" "fmt" ) conn,err := net.Lisien("tcp","127.0.0.1:8082") if err != nil{ fmt.Println("链接失败,错误信息为:"+err) }
接受客户端的链接conn.Accept()
方法:conn.Accept() (newConn,err){}
返回值: newConn
客户端的链接对象,类型为net.Conn
.存放了客户端的链接信息,和与客户端交互的方法.err
存放错误,如果没有错误信息值为nil
注意点: Accept()方法会阻塞,直到有链接过来
// ...上面的代码... // 因为客户端的链接不止一个,需要一直监听,所以加个死循环 for{ newConn,err := conn.Accept() if err != nil{ fmt.Println(err) } go handler(newConn) } // 客户端连接后处理逻辑 func handler(newConn net.Conn){ // TODO }
接收客户端发过来的数据newConn.Read()
方法:newConn.Read(msg)(num,err){}
返回值: num
数据内容的长度,单位字节err
错误信息,如果没有错误信息值为nil
注意点: 参数msg
是一个byte类型的切片,用来保存客户端发送的数据。Read方法同样会阻塞!!
// ...上上边代码补充... // 客户端连接后处理逻辑 func handler(newConn net.Conn){ for{ // 新建一个位置用于存放客户端数据 msg := make([]byte,1024) num,err := newConn.Read(msg) if err != nil{ // 打印错误信息 } fmt.Println("客户端消息:"+msg) } }
获取客户端的IP地址newConn.RemoteAddr().String()
// 获取ip地址,转为之字符串 newConn.RemoteAddr().String()
向客户端发送数据newConn.Write()
方法:newConn.Write(msg){}
参数:msg
类型为[]byte
。
注意点:需要把待发送的字符串转为byte切片类型
newConn.Write([]bye("你好世界,helloworld1"))
关闭客户端连接newConn.Close()
方法: newConn.Close(){}
在客户端连接的返回的对象上调用Close()
方法即可
newConn.Close()
客户端连接tpc服务端
连接服务端net.Dial()
方法: net.Dial({连接类型},{地址})(conn,err){}
放回值: conn
连接成功后的连接对象,err
连接出错时的错误信息,如果没有错误信息,返回nil
// 建立tcp连接 package main import ( "net" "fmt" ) Ip,Port := "127.0.0.1",8081 conn,err := net.Dial("tcp",fmt.Sprintf("%s:%d",Ip,Port)) if err != nil{ fmt.Println("net.Dial 错误:",err) return nil } if(conn == nil){ fmt.Println(">>>>>>>>连接错误") return } fmt.Println(">>>>>>>>连接成功")
运行:
到此这篇关于golang中net的tcp服务使用的文章就介绍到这了,更多相关net的tcp服务使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!