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语言中的UTF-8实现
Apr 26 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
golang goroutine顺序输出方式
Apr 29 Golang
golang日志包logger的用法详解
May 05 Golang
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
May 05 Golang
Golang二维数组的使用方式
May 28 Golang
Go 语言中 20 个占位符的整理
Oct 16 Golang
一文搞懂Golang 时间和日期相关函数
Dec 06 Golang
Golang 实现WebSockets
Apr 24 Golang
Go结合Gin导出Mysql数据到Excel表格
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
浅析PHP水印技术
2007/02/14 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
Python中集合类型(set)学习小结
2015/01/28 Python
Python字符串格式化
2015/06/15 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
python用match()函数爬数据方法详解
2019/07/23 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
美国零售商店:Blue&Cream
2017/04/07 全球购物
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
售后专员岗位职责
2013/12/08 职场文书
个人收入证明范本
2014/01/12 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
银行招聘自荐信
2015/03/06 职场文书
入党转正介绍人意见
2015/06/03 职场文书
黑白记忆观后感
2015/06/18 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏