范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

网络攻防C搭建高效便捷的WebSocket服务器和客户端

  一、概述
  1.1 什么是WebSocket??
  WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
  WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
  1.2 TouchSocket特性
  性能卓越,和同类产品相比,性能提升20%左右,这得益于强大的RRQMSocket。
  封装优雅,从TCP继承封装,能够发送不分包的大数据,也能发送分片的小数据。
  解析简单,在收到消息后,已经将数据帧转换为数据对象,可通过枚举值判断数据类型,通过布尔值判断FIN,RSV1-3等数据。
  能够直接发送二进制数据,也能直接发送文本。
  支持Ssl。
  二、程序集源码、Demo下载
  2.1 源码位置
  Gitee
  Github
  2.2 详细说明文档
  文档首页
  三、安装
  Nuget安装TouchSocket即可,具体步骤详看链接博客。
  VS、Unity安装和使用Nuget包
  四、创建WebSocket服务器
  var service = new HttpService();
  service.AddPlugin().//添加WebSocket功能
  SetWSUrl("/ws").//设定只有特定url能连接。
  SetCallback(WSCallback);//WSCallback回调函数是在WS收到数据时触发回调的。
  var config = new RRQMConfig();
  config.UsePlugin()
  .SetListenIPHosts(new IPHost[] { new IPHost(7789) });
  service.Setup(config).Start();
  Console.WriteLine("Http服务器已启动");
  Console.WriteLine("WS访问:ws://127.0.0.1:7789/ws");
  static void WSCallback(ITcpClientBase client, WSDataFrameEventArgs e)
  {
  switch (e.DataFrame.Opcode)
  {
  case WSDataType.Cont:
  Console.WriteLine(#34;收到中间数据,长度为:{e.DataFrame.PayloadLength}");
  break;
  case WSDataType.Text:
  Console.WriteLine(e.DataFrame.ToText());
  break;
  case WSDataType.Binary:
  if (e.DataFrame.FIN)
  {
  Console.WriteLine(#34;收到二进制数据,长度为:{e.DataFrame.PayloadLength}");
  }
  else
  {
  Console.WriteLine(#34;收到未结束的二进制数据,长度为:{e.DataFrame.PayloadLength}");
  }
  break;
  case WSDataType.Close:
  {
  Console.WriteLine("远程请求断开");
  client.Close("断开");
  }
  break;
  case WSDataType.Ping:
  break;
  case WSDataType.Pong:
  break;
  default:
  break;
  }
  }
  【WSs服务器】
  创建WSs服务器时,其他配置不变,只需要在config中加入以下代码即可。
  在RRQMBox中,放置了一个自制Ssl证书,密码为"RRQMSocket"以供测试。使用配置非常方便。
  var config = new RRQMConfig();
  config.UsePlugin()
  .SetReceiveType(ReceiveType.Auto)
  .SetListenIPHosts(new IPHost[] { new IPHost(7789) })
  .SetServiceSslOption(new ServiceSslOption() //Ssl配置,当为null的时候,相当于创建了ws服务器,当赋值的时候,相当于wss服务器。
  {
  Certificate = new X509Certificate2("RRQMSocket.pfx", "RRQMSocket"),
  SslProtocols = SslProtocols.Tls12
  });
  五、创建WebSocket客户端
  【WS客户端】
  WebSocketClient myWSClient = new WebSocketClient();
  myWSClient.Setup(new RRQMConfig()
  .SetRemoteIPHost("ws://127.0.0.1:7789/ws")
  .SetSingletonLogger(new LoggerGroup(new ConsoleLogger(), new FileLogger())));
  myWSClient.Connect();
  //myWSClient.Received += this.MyWSClient_Received; 客户端接收
  myWSClient.Logger.Message("连接成功");
  六、发送数据
  6.1 直接发送
  6.2 分片发送
  WebSocket是支持分片发送的,这是为了解决大数据的传输而设计的,因为像浏览器这种接收缓存不足的组件,没办法一次性接收一个大数据包,所以必须分片。但是在RRQM中,并没有设计自动分片的功能,而是让发送者决定要不要分片,每个数据包应该多大等。
  分片的函数也已经封装,以第一个函数为例,前三个参数是定位发送数据,最后一个数据则决定每个数据包应当多少尺寸。
  以下列代码为例,则会把data数据,从索引1-8的数据发送,且每个数据包最大长度为4,刚好发送两个包。
  6.3 发送数据帧
  RRQM已经重载了数据帧的发送,这意味着您可以发送任意数据类型的数据。
  数据帧的类型是WSDataFrame,它是一个完全开放的数据结构。
  当然为方便赋值,RRQM内部已经封装了扩展方法。例如:
  一直追加文本。
  WSDataFrame wSDataFrame = new WSDataFrame();
  wSDataFrame.AppendText("I");
  wSDataFrame.AppendText("love");
  wSDataFrame.AppendText("you");
  一直追加二进制。
  WSDataFrame wSDataFrame = new WSDataFrame();
  wSDataFrame.AppendBinary(new byte[] { 1 }, 0, 1);
  wSDataFrame.AppendBinary(new byte[] { 2 }, 0, 1);
  wSDataFrame.AppendBinary(new byte[] { 3 }, 0, 1);
  其扩展方法比较多,大家可以选择适合自己的使用方法。
  ————————————————
  版权声明:本文为CSDN博主「若汝棋茗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  原文链接:https://blog.csdn.net/qq_40374647/article/details/122169738

SpaceX与NASA成功发射载人航天飞船IT之家10月6日消息,据央视新闻报道,当地时间10月5日,SpaceX与NASA在佛罗里达州向国际空间站成功发射了载人飞船,该飞船首次搭载了俄罗斯宇航员。NASA直播画面显示,美刘涛国庆游成都,穿米风衣配咖啡色针织衫,眼藏心酸爱情终回正轨大家好国庆小长假就快过完了,伴随着前几天的降雨气温也是下降了不少,不少小伙伴都把棉衣穿上了,当然了美女们都穿上了要风度不要温度的风衣了,真的是为了展现个人完美的身材哪怕温度再低都不油价调整消息今天10月6日,全国调价后9295号汽油柴油价格距离国庆节假期结束还剩下两天的时间,而假期结束后油价调整周期在之后的两天也仍旧会处于停滞期,整个假期内原油价格上涨,这也会使得国内汽柴油价格调整幅度出现转变,就目前的情况来看,很有长见识(笑话)从前,有个财主,生了一个脑筋很笨的儿子,儿子见了人连句话都不会说。因为财主姓王,所以村里人便给地主家儿子起了个绰号,都叫他王老实。王老实十八岁那年,财主就花钱托媒婆,给他介绍一个对爆火数天后,羊了个羊果然翻车了现如今,应该没人不知道羊了个羊这款难倒全国网友的小游戏吧??羊了个羊,一款抖音和微信同步的小游戏,玩法非常简单,本质上是一款消除游戏,三个同样的图片即可消除。只要通过第二关则可以为内蒙古的豪华盛宴嗨朋友们关注吃and喝带你品尝更多地方美食内蒙古自治区山脉蜿蜒数千里,河流湖泊星罗棋布,有著名的沙漠旅游风景和平原美景。到内蒙古旅游的人们不仅随处可以欣赏到如画的美景,感受少数民族最新油价2022年10月5日国内国六929598号汽油,0号柴油价格国际原油大涨,国内国庆假期时期原油变化率暂无变化,暂定下调,国庆节过后下调局势可能发生转变或上涨!今天是2022年10月5日星期三,离上次调价窗口已经过了14天,距离下次调价还有5国庆长假预订火爆,崇明民宿遭遇成长的烦恼国庆又是全满房,这几天我要尽快招到能帮忙的人,人手太缺了!国庆假期13间客房几乎全部订满,崇明五星级民宿颐一的投资人高青欣喜之余多了新的任务为了应对大客流,增加人手迫在眉睫。不只是广东男篮被隔离后续!两场季前赛正式取消,或影响CBA开幕近日CBA的广东男篮吸引很多人的关注,原因是新赛季在即,各队都奔赴杭州赛区的阶段,广东男篮遇到了问题,因为杜锋的姐姐杜梅从新疆来到东莞,去到了训练基地2个小时,结果杜梅确诊。据悉包运动耳机如何选?一文读懂如果你是运动爱好者,同时有佩戴耳机运动的需求,你会选哪种耳机?现在市面上的耳机种类很多,从划分来看大概可以分为两种,一种是入耳式蓝牙耳机,入耳式蓝牙耳机又分为半入耳式和全入耳式,另查尔斯为什么是查尔斯三世?英国国王的命名方法是什么?随着英国有史以来在位时间最长的伊丽莎白二世女王驾崩,当了七十一年王子的查尔斯终于熬到了登基坐殿的这一天。但在正式加冕之前,查尔斯还有一项重要的事情需要完成选定自己的王号。或许在很多
罗永浩三分钟卖出5万台,39。9元高性价比,小米都得甘拜下风自从罗永浩换到新平台带货之后,李佳琦的压力就大了,因为罗永浩如今和他处于同一平台,所以肯定会抢走更多流量,虽然罗永浩不是专门的带货主播,但是他的传奇故事使得他的人气极高,即使不全力什么是护肤品的有效吸收?别被吸收感骗了花了大价钱买的护肤品,其中添加了各种高级成分,不能完全吸收岂不是太浪费了?皮肤到底是怎么吸收这些成分呢,今天就给大家揭秘一下原理!一吸收感吸收吸收是一个微观过程,我们平时觉得吸收了CBA三消息,杨鸣检验青训,朱芳雨拒绝霍华德,杜锋离任暗藏玄机大家好,头号喵蜜,以绝对严谨态度,吐槽有趣篮球故事,各位老铁养成先读后赞的习惯近日,杨鸣亲自驱车来到沈阳市沈北新区沈阳二中,辽篮名宿刘相韬带领辽宁青年队与沈阳二中进行热身赛,任序航巴黎时装周欠你一个舞台!5岁半女孩穿塑料袋礼服走秀近日,山东济宁一位宝妈发布了一段女儿身穿5套塑料袋礼服走秀的视频,设计感和创意十足,引发网友盛赞巴黎时装周欠你一个舞台!(小武穿塑料袋礼服走秀视频火了)11月9日上午,上游新闻记者GrandSeiko推出新款SBGY011腕表1967年,GrandSeiko系列增加了一款新腕表,注定成为其标志性作品之一。它是44GS,第一款体现GrandSeiko风格的腕表,这种设计语法赋予GrandSeiko独特的外双十一后,中国新消费如何从爆火走向长青?原创图片今年双十一第一阶段战绩出炉。除了大品牌外,新消费品牌仍然表现抢眼,但却显示出变与不变的特点。不变的是美妆彩妆等传统热门赛道,排名较为稳定。欧美系大品牌仍然占主流,上榜的国货60岁韦唯似冻龄,国外逛街穿镂空上衣化淡妆惊艳,曾遭遇坎坷婚姻11月8日,韦唯的小儿子,在个人社交平台分享了母亲的近况。韦唯身着绿色镂空蕾丝上衣,画着精致的妆容,整个人气场全开。韦紫湦夸赞道妈妈60岁了,还这么美,幸福的场景透露着温馨。作为家Trendmo趋势齐溪行至溪畔Trendmo趋势X齐溪行至溪畔于溪畔边仰望,随风而至的涟漪微微荡漾,齐溪短暂地从纷杂细碎的现实中抽离,回归一片纯粹与宁静,在水流与绿荫之间探索内心深处的自己。而在纯净与多彩交融的鞠婧祎厉害了!丝袜也能轻松驾驭,配羽毛裙好时髦普通女孩子如何才能驾驭住丝袜,不妨来学习一下鞠婧祎的穿搭造型,黑丝搭配羽毛裙,时髦又大胆,给广大女孩子想要打造丝袜的穿搭造型,提供了一个很优秀的搭配和造型思路,普通女孩子也能轻轻松皮肤也需要你细心呵护哦皮肤是人体最大的单一器官。覆盖全身,使机体各种器官免受机械性物理性化学性和生物因素的侵袭。皮脂在皮肤表面形成皮表脂质膜,对细菌和真菌的生长有抑制作用,皮脂还能润泽毛发和皮肤,防止毛最新公示!河北1地入选文化和旅游部关于拟确定15家旅游度假区为国家级旅游度假区的公示根据国家级旅游度假区管理办法和旅游度假区等级划分国家标准,经省级文化和旅游行政部门推荐,文化和旅游部按程序组织认定,以