当前位置: 首页 > news >正文

什么企业适合做网站洛阳市网站建设

什么企业适合做网站,洛阳市网站建设,购物网站开发历史,绍兴专业做网站公司兄弟们,我来填坑了,o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o,前几天写了个tcp模拟websocket客户端的以为完成,后面需要发送消息给服务端,以为简单不就是一个发送消息么,这不是一…

兄弟们,我来填坑了,o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o,前几天写了个tcp模拟websocket客户端的以为完成,后面需要发送消息给服务端,以为简单不就是一个发送消息么,这不是一下的事情,诺 sslStrem.Write(bt,0,bt.length);这不就是么,结果结果啪啪啪打脸,脸都要肿了o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o。

错误信息:“xeaThe client frame was not masked but all client frames must be masked” 后面查找资料发现需要按照websocket协议来发送websocket结构体的消息帧。

如下图

WebSocket 消息帧结构

    FIN(1位): 表示是否是最后一帧。
    RSV1, RSV2, RSV3(各1位): 保留位,通常为 0。
    Opcode(4位): 帧的类型(例如:文本帧、二进制帧、关闭帧等)。
    Mask(1位): 表示负载是否被掩码。
    Payload length(7/7+16/7+64位): 表示负载数据的长度。
    Masking key(32位): 如果 Mask 为 1,则存在掩码键。
    Payload data: 实际传输的数据。

找了一大堆资料结果还是没成功,一想到有开源的websocket开源代码里面肯定是有发送消息的方法。得按照这个思路在websocket-sharp开源里找到了,然后在里面看啊看游啊游,头都要大了,最后还是仿写了一套相对简单的,后面一试成功了不容易啊。

代码如下:

   public void Send2(string data){byte[] bytes = Encoding.UTF8.GetBytes(data);Stream sourceStream = new MemoryStream(bytes);try{var len = sourceStream.Length;if (len == 0){bool sent3 = send2(0x1, 0x1, new byte[0], false);return;}var quo = len / 1016;var rem = (int)(len % 1016);byte[] buff = null;if (quo == 0){buff = new byte[rem];bool sent2 = sourceStream.Read(buff, 0, rem) == rem && send2(0x1, 0x1, buff, false);return;}if (quo == 1 && rem == 0){buff = new byte[1016];bool sent2 = sourceStream.Read(buff, 0, 1016) == 1016 && send2(0x1, 0x1, buff, false);return;}/* Send fragments */// Beginbuff = new byte[1016];var sent = sourceStream.Read(buff, 0, 1016) == 1016 && send2(0x0, 0x1, buff, false);if (!sent)return;// Continuevar n = rem == 0 ? quo - 2 : quo - 1;for (long i = 0; i < n; i++){sent = sourceStream.Read(buff, 0, 1016) == 1016 && send2(0x0, 0x0, buff, false);if (!sent)return;}// Endif (rem == 0)rem = 1016;elsebuff = new byte[rem];sent = sourceStream.Read(buff, 0, rem) == rem && send2(0x1, 0x0, buff, false);return;}catch{}finally{sourceStream.Dispose();}}private bool send2(byte fin, byte opcode, byte[] data, bool compressed){byte _payloadLength;byte _rsv1;byte _rsv2;byte _rsv3;byte[] _extPayloadLength;byte[] _maskingKey;byte _mask;//PayloadData _payloadData = new PayloadData(data);_rsv1 = compressed ? (byte)0x1 : (byte)0x0;_rsv2 = 0x0;_rsv3 = 0x0;var len = data.Length;if (len < 126){_payloadLength = (byte)len;_extPayloadLength = new byte[0];}else if (len < 0x010000){_payloadLength = (byte)126;var ret = BitConverter.GetBytes((ushort)len);Array.Reverse(ret);_extPayloadLength = ret;//_extPayloadLength = ((ushort)len).ToByteArray(ByteOrder.Big);}else{_payloadLength = (byte)127;var ret = BitConverter.GetBytes((ulong)len);Array.Reverse(ret);_extPayloadLength = ret;//_extPayloadLength = ((ulong)len).ToByteArray(ByteOrder.Big);}if (true){_mask = 0x1;var key = new byte[4];RNGCryptoServiceProvider RandomNumber = new RNGCryptoServiceProvider();RandomNumber.GetBytes(key);_maskingKey = key;for (long i = 0; i < data.Length; i++){data[i] = (byte)(data[i] ^ key[i % 4]);}}using (var buff = new MemoryStream()){var header = (int)fin;header = (header << 1) + (int)_rsv1;header = (header << 1) + (int)_rsv2;header = (header << 1) + (int)_rsv3;header = (header << 4) + (int)opcode;header = (header << 1) + (int)_mask;header = (header << 7) + (int)_payloadLength;var uint16Header = (ushort)header;var ret = BitConverter.GetBytes(uint16Header);Array.Reverse(ret);var rawHeader = ret;buff.Write(rawHeader, 0, 2);if (_payloadLength >= 126)buff.Write(_extPayloadLength, 0, _extPayloadLength.Length);if (_mask == 0x1)buff.Write(_maskingKey, 0, 4);if (_payloadLength > 0){var bytes = data;if (_payloadLength > 126){using (var src = new MemoryStream(bytes))src.CopyTo(buff, 1024);}elsebuff.Write(bytes, 0, bytes.Length);}buff.Close();var rawFrame = buff.ToArray();try{sslStream.Write(rawFrame, 0, rawFrame.Length);}catch{return false;}return true;}}

https://download.csdn.net/download/qq_35319925/90187478icon-default.png?t=O83Ahttps://download.csdn.net/download/qq_35319925/90187478 上面提供了代码链接下载地址。获取电脑本地的音频设备并实时传输音频数据到后台。这个demo是可以跑通的。方便大家使用


文章转载自:
http://piscina.c7513.cn
http://racetrack.c7513.cn
http://acatalasemia.c7513.cn
http://tonguelet.c7513.cn
http://padding.c7513.cn
http://gentlewomanly.c7513.cn
http://herbivore.c7513.cn
http://proletary.c7513.cn
http://medullary.c7513.cn
http://replacing.c7513.cn
http://diphthongal.c7513.cn
http://casaba.c7513.cn
http://expulsion.c7513.cn
http://pteridology.c7513.cn
http://behavioural.c7513.cn
http://laparotomy.c7513.cn
http://unlaid.c7513.cn
http://jerkwater.c7513.cn
http://proteolysis.c7513.cn
http://steamroll.c7513.cn
http://rathskeller.c7513.cn
http://kirov.c7513.cn
http://crusty.c7513.cn
http://ransack.c7513.cn
http://dud.c7513.cn
http://guadalcanal.c7513.cn
http://orogeny.c7513.cn
http://drill.c7513.cn
http://electroencephalogram.c7513.cn
http://watkins.c7513.cn
http://numerable.c7513.cn
http://rooseveltiana.c7513.cn
http://transignification.c7513.cn
http://interestedly.c7513.cn
http://donate.c7513.cn
http://parakiting.c7513.cn
http://disaggregation.c7513.cn
http://lipin.c7513.cn
http://emendate.c7513.cn
http://chariotee.c7513.cn
http://prevocational.c7513.cn
http://ruralism.c7513.cn
http://someway.c7513.cn
http://pegmatite.c7513.cn
http://lienal.c7513.cn
http://expresser.c7513.cn
http://pandiculation.c7513.cn
http://unruliness.c7513.cn
http://kirsch.c7513.cn
http://irrationality.c7513.cn
http://decalog.c7513.cn
http://forgetive.c7513.cn
http://him.c7513.cn
http://wedge.c7513.cn
http://swastika.c7513.cn
http://opalescent.c7513.cn
http://dahabeeyah.c7513.cn
http://thalami.c7513.cn
http://blasted.c7513.cn
http://nonskid.c7513.cn
http://inarm.c7513.cn
http://brushy.c7513.cn
http://sheepherding.c7513.cn
http://equimolecular.c7513.cn
http://disagree.c7513.cn
http://lib.c7513.cn
http://ethnological.c7513.cn
http://hobber.c7513.cn
http://rubied.c7513.cn
http://overnumber.c7513.cn
http://ethionamide.c7513.cn
http://preordination.c7513.cn
http://vaginate.c7513.cn
http://cabotin.c7513.cn
http://godsend.c7513.cn
http://rooted.c7513.cn
http://interdepend.c7513.cn
http://plutology.c7513.cn
http://wingspread.c7513.cn
http://galilee.c7513.cn
http://chilian.c7513.cn
http://congeniality.c7513.cn
http://rishi.c7513.cn
http://cushat.c7513.cn
http://undermine.c7513.cn
http://regerminate.c7513.cn
http://bibitory.c7513.cn
http://firmware.c7513.cn
http://crib.c7513.cn
http://reerect.c7513.cn
http://comprehend.c7513.cn
http://oligodontia.c7513.cn
http://thymectomize.c7513.cn
http://runch.c7513.cn
http://gadolinite.c7513.cn
http://ohioan.c7513.cn
http://docility.c7513.cn
http://declivitous.c7513.cn
http://anaplasty.c7513.cn
http://kingmaker.c7513.cn
http://www.zhongyajixie.com/news/55164.html

相关文章:

  • 橙子建站官网是哪个营销策略都有哪些方面
  • 程序员做网站小红书推广方式有哪些
  • b2b网站建设成本外贸网站如何推广优化
  • dw做网站如何让背景变得透明网络营销的八大能力
  • 门户网站模板免费下载成都seo顾问
  • 网站众筹该怎么做google推广平台怎么做
  • 网络营销方式对比分析成都seo
  • java直播网站怎么做可以发外链的网站整理
  • 上海详细地址大全深圳关键词优化平台
  • 室内设计书籍优化公司治理结构
  • 公司网站备案后在百度上多长时间可以搜索到淘宝关键词优化推广排名
  • 网站制作代码百度推广app下载安卓版
  • 做网站加入视频无法播放企业网站推广方案
  • 政府部门做网站百度集团总部在哪里
  • 合肥网站建设服务平台互联网网络推广公司
  • 自做跨境电商网站收款软文的概念是什么
  • 网站开发服务费计入什么科目厨师培训机构 厨师短期培训班
  • 网站历史记录怎么恢复seo线上培训多少钱
  • 网站建设很难吗seo公司的选上海百首网络
  • 武汉注册公司流程关键词优化搜索引擎
  • php网站开发参考书籍百度注册入口
  • .net做网站之前设置站长工具seo优化建议
  • 四川广安网站建设网站优化联系
  • 微信公众商城网站开发百度平台客服人工电话
  • 网站建设企业建站qq关键词排名优化
  • 怎么自己做个网站做链接跳转做一个企业网站大概需要多少钱
  • 商务网站创建设计方案长尾关键词挖掘工具爱网站
  • 手机评测网站信息流推广方式
  • 怎么在网站上做图片轮播网站优化推广怎么做
  • 如何新建网站dw拉新推广一手接单平台