golang中net的tcp服务使用
作者:zhijie 发布时间:2023-08-30 10:54:14
标签:golang,net,tcp,服务,使用
服务端监听端口 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


猜你喜欢
- 1.1.1 摘要在开发过程中,我们不时会遇到系统性能瓶颈问题,而引起这一问题原因可以很多,有可能是代码不够高效、有可能是硬件或网络问题,也有
- 导语因为疫情无奈只能在家宅了好多天,随手玩了下自己以前做的一些小游戏,说真的,有几个游戏做的是真的劣质,譬如 flappybird 真的让我
- 如下所示:import cv2vidcap = cv2.VideoCapture('005.avi')success,ima
- 【代码示例】 [code=SQL] DELIMITER $$ DROP FU
- 本文主要介绍python 数据可视化模块 Matplotlib,并试图对其进行一个详尽的介绍。通过阅读本文,你可以:了解什么是 Matplo
- 一、map 1.基本介绍map 是 key-value 数据结构,又称为字段或者关联数组。类似其它编程语言的集合, 在编程中是经常
- 前言删除表,大家下意识想到的命令可能是直接使用DROP TABLE "表名",这是初生牛犊的做法,因为当要删除的表达空间
- 1.环境准备1.MySQL 安装路径:/usr/local2.CentOS 6.2 服务器(64 bit)3.MySQL 5.7.28 下载
- 引言:本人从小白自学python,为了测试基础学习效果,增加一定的促进,想通过参加全国计算机等级考试二级python来检验基础学习情况。在学
- 将 PDF 转换为 CSV在机器学习中,我们应该少一些“数据清理”,多一些“数据
- 一、jupyter notebook是什么官网的介绍是:Jupyter Notebook是一个Web应用程序,允许您创建和共享包含实时代码,
- JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。全局变量函数可以访问是有函数内部定义的变量,如:实例functio
- 简介rpc:远程过程调用协议。简单的来说就是客户端可以很方便得远程调用服务端的接口程序,而不用管底层是如何实现的。XML-RPC的全称是XM
- 步骤一:index页面处理<!DOCTYPE html><html lang="en"><
- 代码如下:using System; using System.Data; using System.Configuration; usin
- 这是解释器设置问题,在设置里找到interpreter 找到合适的目录就可以了。因为重装了python导致pycharm找不到路径了。另外,
- 一、时间日期基本介绍时间日期类型在Python中主要有两个模块:time模块 和 datetime模块time模块: 是基于Unix Tim
- function.js<!--function getObject(objectId) { &nbs
- 在网上查了部分资料但是发现粘上去的代码都存在问题,无奈只好自己修改了一下,代码如下: 如下代码能正常运行,都是网上查找资料最后拼凑总结出来的
- 今晚开放ecmall商城的QQ登陆功能,在回调时产生错误,file_get_contents函数执行时,没有抓取到正确的信息,于是改用cur