我成功收到第一条消息,但第二条(相同的消息)我收到错误:
服务器不得屏蔽发送给客户端的任何帧。
它只有一个客户。
private void RunWebSocketListener()
{
int websocket_port = 8996;
TcpListener websocket = new TcpListener(Address, websocket_port);
websocket.Start();
bool websocket_isRunning = true;
while (websocket_isRunning)
{
Console.WriteLine("--- Waiting for WebSocket ----");
TcpClient websocket_client = websocket.AcceptTcpClient();
NetworkStream sockStream = websocket_client.GetStream();
byte[] bRead = new byte[1024];
sockStream.Read(bRead, 0, bRead.Length);
Console.WriteLine("---- Reading WebSocket ----");
string websocket_header = Encoding.UTF8.GetString(bRead);
string matchs = new System.Text.RegularExpressions.Regex("Sec-WebSocket-Key: (.*)").Match(websocket_header).Groups[1].Value.Trim() + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
string finakAcceptedKey = Convert.ToBase64String(System.Security.Cryptography.SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(matchs)));
// write response
string responseHeader = "";
responseHeader += "HTTP/1.1 101 Switching Protocols\r\n";
responseHeader += "Connection: Upgrade\r\n";
responseHeader += "Upgrade: websocket\r\n";
responseHeader += "Sec-WebSocket-Accept: "+ finakAcceptedKey +"\r\n";
responseHeader += "\r\n";
byte[] sendResponse = Encoding.UTF8.GetBytes(responseHeader);
sockStream.Write(sendResponse, 0, sendResponse.Length);
bool clientConnected = true;
while (clientConnected)
{
byte[] msg = this.encodeMessage("{ \"msg\": \"Your message\" }");
// The Problem Writing on a Second time
sockStream.Write(msg);
Console.WriteLine("--- msg Sent "+ msg.Length +" Bytes ---");
Thread.Sleep(2000);
}
Thread.Sleep(2000);
}
}
C# 上的 #IOException:
无法将数据写入传输连接:已建立
连接被主机中的软件中止。
JavaScript:
var websocket = new WebSocket("ws://LOCAL:PORT");
websocket.onopen = ....
websocket.onmessage = function(e) { console.log(e.data); }
#JavaScript 错误:
failed: A server must not mask any frames that it sends to the client.
- 您收到第一条消息吗? [ 是的,我愿意 ]。
- AcceptTcpClient 到 AcceptSocket [不工作]。
- 我正在使用“睡眠 2 秒”[ 不起作用 ]。
- 新线程[不工作]。
固定的,
这this.encodeMessage
方法我返回一个更大的字节,
byte[] b = new byte[message.length + 5]
To:
byte[] b = new byte[message.length + 2]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)