在客户端 JavaScript 中创建 TCP/IP 套接字

xMi*_*hal 3 javascript sockets tcp client-side

我有一个java客户端,我需要用(客户端)javascript重写它。我像这样打开java Socket:

套接字socket = new Socket("127.0.0.1", 5015);

所以我尝试在javascript中使用websocket:let socket = new WebSocket(" http://127.0.0.1:5015 ");

但这里我有一个js错误:

未捕获的 DOMException:无法构造“WebSocket”:

URL 的方案必须是“ws”或“wss”。不允许使用“http”。

我还尝试使用“ws”或“wss”协议,但服务器不想与此类协议握手。

有没有办法在客户端 JavaScript 中进行此类套接字连接,或者绝对禁止?

Ste*_*n C 5

答案比“不,你做不到”稍微复杂一些。

在网络浏览器中运行的常规网页中的 JavaScript 无法打开普通套接字。根本原因是对用户来说存在安全风险。所以是故意不允许的。

WebSocket 是实现此目的的安全方法。与其他浏览器安全机制结合使用,它们限制允许网页连接的内容。

然而,这并不是故事的结局。可信代码可以(至少在理论上) 发送和接收 TCP 和 UDP 流量。问题在于执行此操作的 API 是非标准的(例如特定于浏览器的)。在某些情况下,它们本身作为第三方浏览器扩展实现。

因此,如果您确实想为您的应用程序追求这一点,您将必须将代码作为可信的浏览器插件/扩展进行分发,并处理一系列浏览器可移植性问题。

值得注意的是,有一个W3C 工作组试图标准化原始套接字 API,但他们已经正式放弃了他们的努力。他们的最新工作草案可以在以下位置找到:

最后,还有一个问题是,受信任的浏览器扩展/插件需要用户同意才能安装。考虑到与在用户浏览器中嵌入此类功能相关的深刻而微妙的安全问题,获得此类事情的知情同意是很困难的