c# - WebSockets 握手后 Chrome 断开连接

标签 c# google-chrome websocket

我正在尝试让一个简单的 WebSocket 示例在我的机器 (localhost) 上运行,我让 JavaScript 和 C# 运行良好并连接,除了 Chrome 在握手后断开连接。

我搜索了一上午,我认为它与同一个域策略有关,正如另一个“问题”所暗示的,我已经将我的浏览器更新到最新版本(12.xxx) .

但是我找不到解决问题的方法。

我在 C# 端使用:

ConnectionOrigin = "http://localhost:8080";
ServerLocation = "ws://localhost:8181/test";

我正在使用直接从磁盘打开的普通 HTML 文件(网址栏上的 file:///)运行 JavaScript。我也尝试过使用 XAMPP 在本地托管它,但我总是遇到同样的问题。

附件是C#程序的日志输出:

   New connection from 127.0.0.1:8181 requested. Handshaking ...
Reading handshake ...
GET /test HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
Sec-WebSocket-Key1: R 506   I   2D }6 qFB  G0`@88J? 4
Sec-WebSocket-Key2: y  20   8403!24  L 5 8

Sending handshake ...
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://localhost:8080
WebSocket-Location: ws://localhost:8181/test


New connection from 127.0.0.1:8181 established.
http://localhost:8080
Data sent to the client ["Time at the server: 23-07-2011 12:57:27"]
Client disconnected.
Waiting for another connection attempt ...

最佳答案

对于这种请求:

GET /test HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8181
Origin: null
Sec-WebSocket-Key1: R 506   I   2D }6 qFB  G0`@88J? 4
Sec-WebSocket-Key2: y  20   8403!24  L 5 8

响应必须是:

HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: null
Sec-WebSocket-Location: ws://localhost:8181/test

the response code here

所以:

  • 第一行是WebSocket,不是Web Socket
  • 它是 Sec-WebSocket-... 而不是 WebSocket-...
  • 您没有包含作为握手重要部分的响应代码(其构造在 the specs 中描述)。
  • 此外,您应该使用 \r\n 而不是 \n(以防您还没有这样做)。

附带说明一下,您可能需要查阅 chrome://net-internals/(Events 选项卡,然后查找合适的 SOCKET_STREAM) 查看 Chrome 实际收到的响应。

关于c# - WebSockets 握手后 Chrome 断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6800190/

相关文章:

css - 背景图像不适用于 chrome 但它适用于边缘

c++ - 如何处理多个 websocket++ 选项卡/窗口?

c# - Hmail 服务器 C# SMTP

c# - 从字符串中提取所有出现的特定字符

c# - 使用 C#、Ajax、Jquery 的 Web 服务不适用于 ASP.Net

google-chrome - css3边框半径不适用于子元素

javascript - 窗口尺寸大于屏幕尺寸?

Python OpenCV套接字实时视频流滞后

Java应用程序将 "forward"数据从TCPSocket到WebSocket?

c# - 如果需要选择数据网格的行,请使用复选框列