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 相关文章推荐
golang interface判断为空nil的实现代码
Apr 24 Golang
go语言求任意类型切片的长度操作
Apr 26 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
go设置多个GOPATH的方式
May 05 Golang
完美解决golang go get私有仓库的问题
May 05 Golang
Golang之sync.Pool使用详解
May 06 Golang
Go 自定义package包设置与导入操作
May 06 Golang
golang中的并发和并行
May 08 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
Go语言读取txt文档的操作方法
Jan 22 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 Golang
Go gorilla/sessions库安装使用
Aug 14 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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
奥地利婴儿用品和玩具购物网站:baby-markt.at
2020/01/26 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
彩色的非洲教学反思
2014/02/18 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL