中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

什么企業(yè)適合做網站北京seo經理

什么企業(yè)適合做網站,北京seo經理,域名做網站自己的電腦,利用ionic做的網站兄弟們,我來填坑了,o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o,前幾天寫了個tcp模擬websocket客戶端的以為完成,后面需要發(fā)送消息給服務端,以為簡單不就是一個發(fā)送消息么,這不是一…

兄弟們,我來填坑了,o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o,前幾天寫了個tcp模擬websocket客戶端的以為完成,后面需要發(fā)送消息給服務端,以為簡單不就是一個發(fā)送消息么,這不是一下的事情,諾 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” 后面查找資料發(fā)現需要按照websocket協(xié)議來發(fā)送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開源代碼里面肯定是有發(fā)送消息的方法。得按照這個思路在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://www.risenshineclean.com/news/31723.html

相關文章:

  • 網站維護運營好做嗎seo搜索引擎優(yōu)化包郵
  • 邢臺網站建設03191688網絡營銷的特點不包括
  • 電商怎么開始做怎么優(yōu)化標題和關鍵詞排名
  • 助孕網站優(yōu)化推廣高端網站建設制作
  • 網站關鍵詞怎么添加seo文章范文
  • 學做粵菜的網站輔導班培訓機構
  • 開發(fā)中英文切換網站如何做網絡營銷大賽策劃書
  • 做網站需要什么條件廣告推廣媒體
  • 如何做盆栽蔬菜網站推廣普通話的意義30字
  • 大型網站技術架構:核心原理與案例分析16888精品貨源入口
  • 教我做網站立即優(yōu)化在哪里
  • 電影網站vps服務器廣告加盟
  • 互助盤網站開發(fā)萬網域名查詢接口
  • wordpress更新文章長沙官網seo服務
  • 中國六冶的網站誰做的今日的頭條新聞
  • 多語言網站建設推廣青島網站建設運營推廣
  • 外貿推廣網站公司網站seo綜合查詢
  • 做競價要會做網站嗎優(yōu)化排名推廣技術網站
  • 做自媒體小視屏哪個網站好企業(yè)推廣文案
  • 哪些網站上可以做租車平臺推廣費用一般是多少
  • 分銷微信小程序開發(fā)免費seo工具
  • 網絡營銷模式課seo網站推廣可以自己搞嗎
  • 做亞馬遜網站一般發(fā)什么快遞海外推廣解決方案
  • 深圳微商城網站設計價格西安seo
  • 企業(yè)網站導航優(yōu)化成都做整站優(yōu)化
  • 高新區(qū)做網站讓顧客進店的100條方法
  • 園洲做網站公司怎么做網站平臺
  • 邯鄲做網站的地方網絡設計
  • 可以做設計兼職的網站有哪些工作室搜外seo
  • 百姓網租房seo的定義是什么