Go语言 详解net的tcp服务


Posted in Golang onApril 14, 2022

服务端监听端口 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(">>>>>>>>连接成功")

运行: 

Go语言 详解net的tcp服务

到此这篇关于golang中net的tcp服务使用的文章就介绍到这了!

Golang 相关文章推荐
Go语言切片前或中间插入项与内置copy()函数详解
Apr 27 Golang
golang中的空slice案例
Apr 27 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
Golang: 内建容器的用法
May 05 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
Go语言基础切片的创建及初始化示例详解
Nov 17 Golang
如何利用golang运用mysql数据库
Mar 13 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
golang定时器
Apr 14 Golang
Golang 实现 WebSockets 之创建 WebSockets
Apr 24 Golang
Golang入门之计时器
May 04 Golang
golang连接MySQl使用sqlx库
Apr 14 #Golang
Go语言安装并操作redis的go-redis库
Apr 14 #Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 #Golang
Go语言grpc和protobuf
Golang流模式之grpc的四种数据流
Apr 13 #Golang
Golang数据类型和相互转换
Apr 12 #Golang
Go语言的协程上下文的几个方法和用法
Apr 11 #Golang
You might like
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
从vue源码看props的用法
2019/01/09 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
python实现的解析crontab配置文件代码
2014/06/30 Python
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
python微信公众号开发简单流程
2018/03/23 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
Python面向对象实现方法总结
2020/08/12 Python
详解python UDP 编程
2020/08/24 Python
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
纽约海:Sea New York
2018/11/04 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
雷锋精神演讲稿
2014/05/13 职场文书
忠诚教育心得体会
2014/09/03 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python