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二维切片初始化的实现
Apr 08 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
golang 实现对Map进行键值自定义排序
Apr 28 Golang
golang 生成对应的数据表struct定义操作
Apr 28 Golang
Golang 如何实现函数的任意类型传参
Apr 29 Golang
golang switch语句的灵活写法介绍
May 06 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
聊聊golang中多个defer的执行顺序
May 08 Golang
Go语言实现Snowflake雪花算法
Jun 08 Golang
Go遍历struct,map,slice的实现
Jun 13 Golang
go使用Gin框架利用阿里云实现短信验证码功能
Aug 04 Golang
Go gorilla securecookie库的安装使用详解
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
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
python实现的阳历转阴历(农历)算法
2014/04/25 Python
python代码制作configure文件示例
2014/07/28 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python实现简单的语音识别系统
2017/12/13 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
关于Java finally的面试题
2016/04/27 面试题
写自荐信的七个技巧
2013/10/15 职场文书
两则小学生的自我评价分享
2013/11/14 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
运动会表扬稿范文
2015/05/05 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
《给予树》教学反思
2016/03/03 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS