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语言操作数据库及其常规操作的示例代码
Apr 21 Golang
win10下go mod配置方式
Apr 25 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
Golang 实现获取当前函数名称和文件行号等操作
May 08 Golang
Golang中channel的原理解读(推荐)
Oct 16 Golang
golang中的struct操作
Nov 11 Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Apr 10 Golang
Go语言 详解net的tcp服务
Apr 14 Golang
Golang 入门 之url 包
May 04 Golang
Go语言编译原理之变量捕获
Aug 05 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
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
js arguments.callee的应用代码
2009/05/07 Javascript
JavaScript 学习笔记(十五)
2010/01/28 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
JavaScript 基本概念
2015/01/20 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
Python决策树分类算法学习
2017/12/22 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
详解python之heapq模块及排序操作
2019/04/04 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
python爬虫容易学吗
2020/06/02 Python
Python远程linux执行命令实现
2020/11/11 Python
南威尔士家居商店:Leekes
2016/10/25 全球购物
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
学校采购员岗位职责
2014/01/02 职场文书
打架检讨书400字
2014/01/17 职场文书
大学军训感言800字
2014/02/27 职场文书
房屋继承公证书
2014/04/10 职场文书
挂职学习心得体会
2014/09/09 职场文书
颐和园导游词400字
2015/01/30 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
单身证明格式样本
2015/06/15 职场文书
婚宴新郎致辞
2015/07/28 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis