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 Gin实现文件上传下载的示例代码
Apr 02 Golang
一文读懂go中semaphore(信号量)源码
Apr 03 Golang
golang slice元素去重操作
Apr 30 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
golang elasticsearch Client的使用详解
May 05 Golang
go 实现简易端口扫描的示例
May 22 Golang
go goroutine 怎样进行错误处理
Jul 16 Golang
Golang中channel的原理解读(推荐)
Oct 16 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
golang为什么要统一错误处理
Apr 03 Golang
Go获取两个时区的时间差
Apr 20 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与javascript的两种交互方式
2006/10/09 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
Display SQL Server Version Information
2007/06/21 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
js转义字符介绍
2013/11/05 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
urllib2自定义opener详解
2014/02/07 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python实现按关键字筛选日志文件
2019/12/24 Python
在keras里实现自定义上采样层
2020/06/28 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
Django实现随机图形验证码的示例
2020/10/15 Python
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
公证书样本
2014/04/10 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
Python 循环读取数据内存不足的解决方案
2021/05/25 Python
js作用域及作用域链工作引擎
2022/07/07 Javascript
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技