golang中net的tcp服务使用
作者:zhijie 时间:2023-08-30 10:54:14
服务端监听端口 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(">>>>>>>>连接成功")
运行:
来源:https://juejin.cn/post/7069580997234442247
标签:golang,net,tcp,服务,使用
0
投稿
猜你喜欢
Python help()函数用法详解
2022-09-15 13:15:34
php+ajax+h5实现图片上传功能
2024-05-22 10:05:39
深入理解Javascript中的观察者模式
2024-05-13 09:36:23
Sublime开发python程序的示例代码
2023-11-06 09:45:46
pytorch fine-tune 预训练的模型操作
2023-05-02 01:05:25
Python使用pyserial进行串口通信的实例
2022-03-07 15:30:09
关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误
2024-01-24 07:49:27
Vue项目服务器部署刷新页面404问题及解决
2024-04-09 10:47:22
asp上传文件自动重命名方法
2007-08-24 09:46:00
php获取客户端IP及URL的方法示例
2024-05-03 15:49:01
Vue.js鼠标悬浮更换图片功能
2024-04-30 10:42:35
python主线程与子线程的结束顺序实例解析
2023-10-09 12:46:07
搞定web设计中网页路径问题
2007-09-22 08:52:00
pygame游戏之旅 添加游戏界面按键图形
2023-06-30 21:48:38
从绘画语言的发展,看视觉设计风格
2008-08-03 17:11:00
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2023-06-19 04:56:38
Go语言中日期包(time包)的具体使用
2024-05-08 10:52:33
解析JavaScript中的标签语句
2024-05-13 10:35:07
tensorflow模型继续训练 fineturn实例
2023-07-10 12:53:09
浅析SQL Server授予了CREATE TABLE权限但是无法创建表
2024-01-28 18:26:23