位置: 编程技术 - 正文

Go语言基于Socket编写服务器端与客户端通信的实例(go语言websocket)

编辑:rootadmin

推荐整理分享Go语言基于Socket编写服务器端与客户端通信的实例(go语言websocket),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:go语言 socket,go socket编程,go语言基于什么语言开发,golang socket编程,go语言 socket,go语言websocket,go语言基于什么,go语言基于什么语言开发,内容如对您有帮助,希望把文章链接给更多的朋友!

在golang中,网络协议已经被封装的非常完好了,想要写一个Socket的Server,我们并不用像其他语言那样需要为socket、bind、listen、receive等一系列操作头疼,只要使用Golang中自带的net包即可很方便的完成连接等操作~在这里,给出一个最最基础的基于Socket的Server的写法:

唔,抛除Go语言里面行代码有5行error的蛋疼之处,你可以看到,Server想要建立并接受一个Socket,其核心流程就是这三步,通过Listen、Accept 和Read,我们就成功的绑定了一个端口,并能够读取从该端口传来的内容~Server写好之后,接下来就是Client方面啦,我手写一个HelloWorld给大家:可以看到,Client这里的关键在于这两步,主要是负责解析端口和连接~写好Server和Client之后,让我们运行一下看看:~~成功运行,Console出现Server等待连接的提示:

Server端成功的收到了我们的Hello-World啦,至于后面的那行红字,则是断开连接的提示~

Go语言基于Socket编写服务器端与客户端通信的实例(go语言websocket)

到这里,一个最基础的使用Socket的Server-Client框架就出来啦~如果想要让Server能够响应来自不同Client的请求,我们只要在Server端的代码的main入口中,在 handleConnection(conn net.Conn) 这句代码的前面加上一个 go,就可以让服务器并发处理不同的Client发来的请求啦

自定义通讯协议在上面我们做出来一个最基础的demo后,已经可以初步实现Server和Client之间的信息交流了~ 这一章我会介绍一下怎么在Server和Client之间实现一个简单的通讯协议,从而增强整个信息交流过程的稳定性。 在Server和client的交互过程中,有时候很难避免出现网络波动,而在通讯质量较差的时候,Client有可能无法将信息流一次性完整发送,最终传到Server上的信息很可能变为很多段。 如下图所示,本来应该是分条传输的json,结果因为一些原因连接在了一起,这时候就会出现问题啦,Server端要怎么判断收到的消息是否完整呢?~

唔,答案就是这篇文章的主题啦:在Server和Client交互的时候,加入一个通讯协议(protocol),让二者的交互通过这个协议进行封装,从而使Server能够判断收到的信息是否为完整的一段。(也就是解决分包的问题) 因为主要目的是为了让Server能判断客户端发来的信息是否完整,因此整个协议的核心思路并不是很复杂:协议的核心就是设计一个头部(headers),在Client每次发送信息的时候将header封装进去,再让Server在每次收到信息的时候按照预定格式将消息进行解析,这样根据Client传来的数据中是否包含headers,就可以很轻松的判断收到的信息是否完整了~ 如果信息完整,那么就将该信息发送给下一个逻辑进行处理,如果信息不完整(缺少headers),那么Server就会把这条信息与前一条信息合并继续处理。

下面是协议部分的代码,主要分为数据的封装(Enpack)和解析(Depack)两个部分,其中Enpack用于Client端将传给服务器的数据封装,而Depack是Server用来解析数据,其中Const部分用于定义Headers,HeaderLength则是Headers的长度,用于后面Server端的解析。这里要说一下ConstMLength,这里代表Client传入信息的长度,因为在golang中,int转为byte后会占4长度的空间,因此设定为4。每次Client向Server发送信息的时候,除了将Headers封装进去意以外,还会将传入信息的长度也封装进去,这样可以方便Server进行解析和校验。 协议写好之后,接下来就是在Server和Client的代码中应用协议啦,下面是Server端的代码,主要负责解析Client通过协议发来的信息流:

然后是Client端的代码,这个简单多了,只要给信息封装一下就可以了~:这样我们就成功实现在Server和Client之间建立一套自定义的基础通讯协议啦,让我们运行一下看下效果:

成功识别每一条Client发来的信息啦~~

python脚本设置超时机制系统时间的方法 本文为大家介绍了python脚本设置系统时间的方法,一共有两种,其一是调用socket直接发送udp包到国家授时中心,其二是调用ntplib包。我在本地电脑ping国

python脚本设置系统时间的两种方法 本文为大家分享了两种python脚本设置系统时间的方法,供大家参考,具体内容如下第一种方法,使用Python设置系统时间,即给系统校时#电脑时间用了一

python实现识别相似图片小结 文章简介在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系。当然了,

标签: go语言websocket

本文链接地址:https://www.jiuchutong.com/biancheng/382381.html 转载请保留说明!

上一篇:使用C#配合ArcGIS Engine进行地理信息系统开发(arcgis engine+c#实例开发教程)

下一篇:python脚本设置超时机制系统时间的方法(python脚本基本命令)

  • 不能从销项税额中抵扣的进项税额都有什么
  • 非上市公司股权转让涉及哪些税
  • 延期申报后可否延期缴纳税款
  • 承兑汇票用开发票吗
  • 金银首饰以旧换新增值税
  • 支票退票怎么做账务处理
  • 食堂费用没有发票可以税前扣除吗
  • 开了红字信息表当月怎么做账
  • 投资者回售选择权是什么意思
  • 预算外收入计入什么科目
  • 商业汇票贴现金额的计算
  • 费用票据包括哪些
  • 营改增土地出租
  • 成本法和权益法大白话
  • 年终结账后,应当更换新账的有( )
  • 采购单录入、接收分配会计分录怎么写?
  • 生产车间员工体检费怎么入账
  • 通用机打发票没写税额
  • 冲减增值税销项税额
  • 公司向个人转账分录
  • 没有金税盘怎么勾选发票
  • 小规模纳税人月销售额不超过10万免征
  • 用人单位在职职工年平均工资怎么算
  • 工程管理咨询费计入什么科目
  • win7文件打开方式怎么恢复以前
  • 缴纳人身意外保险凭证是什么
  • 跨行汇入会计分录
  • 实收资本怎么用
  • 开发票原则是收款之后才能开具吗
  • 误餐费怎么入账
  • 收到客户预付的保费90000元,存入银行
  • vue解决跨域问题
  • 代开专用发票缴纳增值税需要计提吗?
  • win10电脑c盘满了怎么转移到d盘
  • 3gwifi怎么用
  • 投资性房地产减值准备为什么不能转回
  • yolov5损失
  • 同一控制下企业合并报表编制
  • php两个等号和三个的区别
  • vue实现登陆
  • 《一文搞懂IoU发展历程》GIoU、DIoU、CIoU、EIoU、αIoU、SIoU
  • bcdboot命令怎么用
  • username命令
  • 以个人名义和公司名义入股的利弊
  • wordpress站点地址如何设置
  • 终止合约要赔钱吗
  • 汽车的计提折旧
  • 申报高新企业的好处
  • 公司有残疾人如何申报残保金
  • 交易性金融资产公允价值变动怎么算
  • 营改增后服务业账务处理
  • 奖励促销策略
  • 未分配利润科目余额在借方还是贷方
  • 错过报税期
  • 存货过期报废进项税额怎么处理
  • 国税地税合并的时间
  • 应收账款是什么意思
  • 会计凭证发票粘贴
  • linux/mac安装mysql忘记密码的解决办法
  • ghost读取不到硬盘
  • win8系统如何激活
  • windows server vista
  • Windows Server 2008下的自助安全防御
  • centos如何设置ip
  • win8怎么进系统
  • csinsm32.exe是安全的进程吗 csinsm32进程有哪些用处
  • crontab环境变量不生效
  • windows7默认网关不可用
  • javascript操作dom对象
  • vue父子组件传值props
  • 黑洞数6174视频
  • jQuery插件封装时如要实现链式编程,需要
  • html键盘监听
  • JQuery之proxy实现绑定代理方法
  • js验证码代码怎么写
  • js实现组件功能
  • 税务局试用期
  • 税控盘登录密码和口令
  • 为什么医保名字不一样
  • 去银行签贷款合同后多久办过户
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设