第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用C#實現(xiàn)websocket 服務器問題

使用C#實現(xiàn)websocket 服務器問題

大話西游666 2018-12-07 05:52:58
我的代碼如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Net; using System.Net.Sockets; using System.Threading; using System.Security.Cryptography; using System.IO; namespace ConsoleService { class Program { static AutoResetEvent allDone = new AutoResetEvent(false); static void Main(string[] args) { IPEndPoint localEP = new IPEndPoint(IPAddress.Parse("10.9.16.31"), 1818); Console.WriteLine("Local address and port : {0}", localEP.ToString()); Socket listener = new Socket(localEP.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); try { listener.Bind(localEP); listener.Listen(500); while (true) { Socket sc = listener.Accept(); if (sc != null) { StateObject state = new StateObject(); state.workSocket = sc; Console.WriteLine("Waiting for a connection..."); sc.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); allDone.WaitOne(); } } } catch (Exception e) { Console.WriteLine(e.ToString()); } Console.WriteLine("Closing the listener..."); } static void ReceiveCallback(IAsyncResult ar) { try { // Retrieve the state object and the client socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; Socket client = state.workSocket; Console.WriteLine("接收自:"+state.workSocket.RemoteEndPoint.ToString()); // Read data from the remote device. int bytesRead = client.EndReceive(ar); allDone.Set(); if (bytesRead > 0) { System.Text.UTF8Encoding decoder = new System.Text.UTF8Encoding(); string browser=decoder.GetString(state.buffer,0,bytesRead); Console.WriteLine(browser); string key = string.Empty; Regex r = new Regex(@"Sec\-WebSocket\-Key:(.*?)\r\n"); //查找"Abc" Match m = r.Match(browser); //設定要查找的字符串 if (m.Groups.Count != 0) { key = Regex.Replace(m.Value, @"Sec\-WebSocket\-Key:(.*?)\r\n", "$1").Trim(); } Console.WriteLine("獲取的客戶端的KEY:"+key); string secKeyAccept = Convert.ToBase64String(SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"))); Console.WriteLine("服務器端生成的KEY:"+secKeyAccept); var responseBuilder = new StringBuilder(); responseBuilder.Append("HTTP/1.1 101 Switching Protocols" + Environment.NewLine); responseBuilder.Append("Upgrade: websocket" + Environment.NewLine); responseBuilder.Append("Connection: Upgrade" + Environment.NewLine); responseBuilder.Append("Sec-WebSocket-Accept: " + secKeyAccept + Environment.NewLine); responseBuilder.Append("Sec-WebSocket-Protocol: chat" + Environment.NewLine); Console.WriteLine("服務器端欲發(fā)送信息:\r\n"+responseBuilder.ToString()); byte[] HandshakeText = Encoding.UTF8.GetBytes(responseBuilder.ToString()); state.workSocket.BeginSend(HandshakeText, 0, HandshakeText.Length, 0, new AsyncCallback(SendCallback), state); } } catch (Exception e) { Console.WriteLine(e.ToString()); } } static void SendCallback(IAsyncResult ar) { StateObject state = (StateObject)ar.AsyncState; Socket client = state.workSocket; client.EndSend(ar); Console.WriteLine("發(fā)送至:" + state.workSocket.RemoteEndPoint.ToString()+" 結束。"); Console.WriteLine("本應該握手成功的?!"); //byte[] msg = Encoding.UTF8.GetBytes("hello"); //state.workSocket.Send(msg); } } public class StateObject { public Socket workSocket = null; public const int BufferSize = 1024; public byte[] buffer = new byte[BufferSize]; public StringBuilder sb = new StringBuilder(); } } HTML代碼: <html> <head> <meta charset="UTF-8"> <title>Web sockets test</title> <script src="jquery-min.js" type="text/javascript"></script> <script type="text/javascript"> var ws; function ToggleConnectionClicked() { try { ws = new WebSocket("ws://10.9.16.31:1818/chat"); ws.onopen = function(event){alert("連接已經(jīng)建立:"+this.readyState);}; ws.onmessage = function(event){alert("接收到的數(shù)據(jù):"+event.data);}; ws.onclose = function(event){alert("斷開,信息:"+this.readyState);}; ws.onerror = function(event){alert("錯誤"+event.message);}; } catch (ex) { alert(ex.message); } //document.getElementById("ToggleConnection").innerHTML = "斷開"; }; function SendData() { try{ ws.send("hello"); }catch(ex){ alert(ex.message); } }; function close() { try{ ws.close(); ws=null; }catch(ex){ alert(ex.message); } }; function seestate(){ alert(ws.readyState); } </script> </head> <body> <button id='ToggleConnection' type="button" onclick='ToggleConnectionClicked();'>連接</button><br /> <button id='ToggleConnection' type="button" onclick='SendData();'>發(fā)送</button><br /> <button id='ToggleConnection' type="button" onclick='close();'>斷開</button><br /> <button id='ToggleConnection' type="button" onclick='seestate();'>狀態(tài)</button><br /> </body> </html> ? 使用的瀏覽器版本:Google Chrome 21.0.1180.83m 但一直都沒握手成功,發(fā)送了連接瀏覽器沒任何反應,但管理服務器端確能觸發(fā)onclose事件。 ? 求解惑?
查看完整描述

8 回答

?
偶然的你

TA貢獻1841條經(jīng)驗 獲得超3個贊

最后缺一個換行!

查看完整回答
反對 回復 2019-01-21
?
qq_花開花謝_0

TA貢獻1835條經(jīng)驗 獲得超7個贊

不行的。最后是去掉最后一行,再加上一個換行才行。

查看完整回答
反對 回復 2019-01-21
?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

@osEye:

兩個問題

1) Handshake結尾應該兩個換行

2) 要傳回和請求相匹配的protocol

查看完整回答
反對 回復 2019-01-21
?
米琪卡哇伊

TA貢獻1998條經(jīng)驗 獲得超6個贊

這個沒多麻煩。你那東西很難賣出去。

查看完整回答
反對 回復 2019-01-21
  • 8 回答
  • 0 關注
  • 533 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號