日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

websocket服务器响应头,从服务器发送响应握手后,websocket.onopen不会触发

發布時間:2024/1/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 websocket服务器响应头,从服务器发送响应握手后,websocket.onopen不会触发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面我已詳細分享了我的代碼。我閱讀文檔和關于握手的一切。我遵循了文檔中提供的所有步驟以及互聯網上的眾多示例,但仍然存在此問題。奇怪的事情id websocket.onclsose()在我關閉服務器時被觸發。從服務器發送響應握手后,websocket.onopen不會觸發

// Simple Websocket server

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net.Sockets;

using System.Net;

using System.IO;

using System.Security.Cryptography;

using System.Threading;

namespace WebSocketServer

{

class Program

{

//port

private static int _port = 8181;

static void Main(string[] args)

{

TcpListener t = new TcpListener(IPAddress.Loopback, _port);

t.Start();

Console.WriteLine("Server is started and waiting for client\n\n");

byte[] buff = new byte[255];

NetworkStream stream;

TcpClient client;

while(true)

{

client = t.AcceptTcpClient();

if (!client.Connected)

return;

// I need form a proper mechanism to get all the data out of network stream.

// If I wait too long client get disconnected and we dont get stream and if

// if we dont wait at all then data doesnt reach server port and hence cant

// read the handshake.

stream = client.GetStream();

while ((stream.Read(buff, 0, buff.Length)) != 0)

{

break;

}

if (0 != buff.Length)

break;

}

StreamWriter writer = new StreamWriter(stream);

writer.AutoFlush = true;

//while (stream.DataAvailable)

//stream.Read(buff, 0, buff.Length);

Console.WriteLine(System.Text.ASCIIEncoding.ASCII.GetString(buff));

string clientHandshake = System.Text.ASCIIEncoding.ASCII.GetString(buff);

char[] separators = new char[1];

separators[0] = '\n';

string[] temp = clientHandshake.Split(separators, 100);

string keyword = "Sec-WebSocket-Key";

string key = "";

foreach (string s in temp)

{

if (s.Contains(keyword))

{

string keyTemp= s.Substring(keyword.Length + 2);

key = keyTemp.Remove(keyTemp.Length - 1);

break;

}

}

string responseKey = GetServerResponseKey(key);

// Send Server handshake

string handshake =

"HTTP/1.1 101 Switching Protocols\r\n" +

"Upgrade: websocket\r\n" +

"Connection: Upgrade\r\n" +

"Sec-WebSocket-Accept: " + responseKey + "\r\n";

writer.Write(handshake);

writer.Flush();

Console.WriteLine(handshake);

while ((stream.Read(buff, 0, buff.Length)) != 0)

{

break;

}

Console.WriteLine(System.Text.ASCIIEncoding.ASCII.GetString(buff));

// Keep Server alive

while (true)

{ }

}

//Helper method to convert string into Byte[]

private static byte[] GetByteArray(string str)

{

UTF8Encoding encoding = new UTF8Encoding();

return encoding.GetBytes(str);

}

//This method is requuired because it combines key(got it from client)

//with GUID. Then takes SHA1 hash of that string and then encode to base64.

//This is all required because Handshake mechanism can be done by only this

//way according to Websocket Protocol(http://datatracker.ietf.org/doc/rfc6455/)

private static string GetServerResponseKey(string key)

{

Console.WriteLine("original key = " + key);

string keyForHash = String.Concat(key, Guid.NewGuid());

Console.WriteLine("text version of server response key = " + keyForHash);

UTF8Encoding encoding = new UTF8Encoding();

byte[] temp = encoding.GetBytes(keyForHash);

SHA1 hashProvider = new SHA1CryptoServiceProvider();

byte[] keyForBase64 = hashProvider.ComputeHash(temp);

return Convert.ToBase64String(keyForBase64);

}

}

}

// Simple WebSocket Client

var ws;

function btnConnectSend_onclick() {

if ("WebSocket" in window) {

ws = new WebSocket("ws://localhost:8181");

ws.onopen = function() {

alert("Connection Open");

ws.send("Hello Server");

};

ws.onmessage = function(evt) {

form1.txtMessage.value = evt.data;

alert("Server says:" + evt.data);

};

ws.onclose = function() {

alert("Socket Closed!!!");

};

ws.onerror = function() {

alert("WTF!");

};

}

}

function btnClose_onclick() {

ws.close();

};

總結

以上是生活随笔為你收集整理的websocket服务器响应头,从服务器发送响应握手后,websocket.onopen不会触发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜电影一区 | 精国产品一区二区三区a片 国产精品第一 | 成人免费高清在线播放 | 精品成人一区二区三区久久精品 | 爱爱视频在线播放 | www亚洲色图 | 国产精品久久久久精 | 国产精品毛片久久久久久久 | 在线免费国产视频 | 国产99在线观看 | 奇米在线视频 | 精品无码人妻一区二区三 | 日韩av网页 | 伊人影院综合在线 | www.黄色国产| 女人十八岁毛片 | 亚洲成av人片在www色猫咪 | 久久精品噜噜噜成人88aⅴ | 狠狠干2021| 日本一区二区三区电影在线观看 | 成人精品动漫 | 日韩一区二区三区视频在线观看 | 欧洲精品久久久久毛片完整版 | 国产在线喷水 | 久久亚洲av成人无码国产电影 | 欧美性爱精品一区 | 亚洲第一女人av | 91午夜视频在线观看 | 老鸭窝一区二区 | av2018| 无码人妻h动漫 | 欧美在线免费视频 | 在线爽| 欧美性猛交xx乱大交 | 中文免费在线观看 | 亚洲精品污一区二区三区 | 麻豆传媒在线 | 精品无码黑人又粗又大又长 | 成片在线观看 | 久久这里都是精品 | 国产 欧美 精品 | 嫩色av| 久操伊人 | 懂色av一区二区三区四区五区 | 日本美女一级视频 | 成人在线激情 | 嘿咻视频在线观看 | 国产淫视 | 97精品人妻一区二区三区在线 | 人人插人人干 | 妺妺窝人体色www聚色窝仙踪 | 动漫美女无遮挡免费 | 孕妇毛片 | 久久久久人妻一区精品 | 国产最爽的乱淫视频国语对白 | 最新色视频 | 97色伦图片 | 日日日日干 | 免费观看国产精品 | 日日麻批免费视频播放 | 久久久久久国产精品一区 | 色婷婷av一区二区三区四区 | 视频一区二区三 | 国产精品日日夜夜 | 中国性xxx | 久操久操 | 91黄色免费看 | 麻豆视频网页 | 91美女网 | 国产黄a三级三级看三级 | 国产一级二级三级视频 | 久久精品99国产精 | 亚洲黄色小说网 | 金8天国av | 97超碰国产精品无码蜜芽 | 日本一本在线观看 | 丰满人妻一区二区三区精品高清 | 超碰美女在线 | 国产一区二区欧美日韩 | 亚洲国产中文字幕在线 | 国产精品一区二区网站 | 久久久精品国产sm调教 | 伊人春色在线 | 少妇大叫太粗太大爽一区二区 | 久久久久久久综合 | 少妇又紧又色 | 狠狠躁日日躁夜夜躁av | 24小时日本在线www免费的 | 秋霞无码一区二区 | 亚洲一区色 | 日本妇女毛茸茸 | 91在线第一页 | 九色视频国产 | 婷婷看片 | 椎名空在线观看 | 国产一在线观看 | 在线播放中文字幕 | 丁香色综合 | 久久色婷婷 |