使用JavaScript通过WebSockets传输文件

5

你好,我尝试传输文件。我有一些将文件转换为二进制并使用c++通过网络传输的程序。我想知道是否可以使用JavaScript和WebSockets传输文件?如果有如何将我的c++程序集成到JavaScript中的示例,将不胜感激。谢谢。


我也很感兴趣,想知道这是否可行。 - DasBoot
2个回答

7

Javascript有两个新的二进制类型:类型化数组(arraybuffers)和Blob(基本上是文件)。

WebSockets支持发送和接收类型化数组和Blobs。

要在两个浏览器之间使用WebSockets传输数据,您需要一个服务器来连接它们(在此时,浏览器WebSocket支持仅限客户端)。

如果您有一个现有的C ++服务器处理文件传输,那么您应该可以很容易地向其添加WebSocket服务器支持。您可以在此页面找到WebSocket客户端和服务器实现:http://en.wikipedia.org/wiki/Comparison_of_WebSocket_implementations

在JavaScript中,要建立与WebSocket服务器的连接,您可以执行以下操作:

ws = new WebSocket("ws://100.101.102.103");

send()方法支持普通字符串、类型化数组或Blob。发送类型化数组和Blob将导致服务器接收到的帧作为二进制帧(opcode = 2)。

ws.send(myTypedArray);

要接收消息,您需要注册一个消息处理程序:

ws.onmessage = function (evt) {
    console.log("Got ws message: " + evt.data);
};

如果服务器发送二进制帧/消息,则事件的onmessage数据属性将包含类型化数组或Blob,具体取决于binaryType属性的设置。您可以按照以下方式更改接收到的二进制数据的类型:

ws.binaryType = "blob"; // or "arraybuffer"

1
你想做的不可能。WebSocket 只能以客户端模式运行,它无法接受来自另一个 WebSocket 客户端(例如另一个浏览器)的连接。
可以通过服务器将 WebSocket 客户端连接在一起,但此时它不再是真正的点对点通信,因此我不确定这是否仍然有用或有趣。
参见:Websockets 能让服务器在浏览器中运行吗?

1
谢谢。如果您能提供如何通过服务器执行此操作的示例,我们将不胜感激。=) - DasBoot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接