通过websockets使用javascript传输文件

时间:2012-07-09 06:28:28

标签: javascript html5 websocket

你好,我正在尝试传输文件。我有一些程序将文件转换为二进制文件并通过网络使用c ++传输它们。我想知道我是否能够使用javascripts和websockets传输文件?关于如何将我的c ++程序集成到javascript中的任何示例将不胜感激。感谢。

2 个答案:

答案 0 :(得分:7)

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

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

要使用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 data属性将包含类型化数组或blob,具体取决于binaryType属性的设置。您可以更改收到的二进制数据的类型:

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

答案 1 :(得分:1)

你想要做的是不可能的。 WebSocket只能在客户端模式下运行;它无法接受来自另一个WebSocket客户端(例如另一个浏览器)的连接。

可以通过服务器将WebSocket客户端相互挂钩,但此时它已经不再是点对点了,所以我不确定它是否真的有用或者有趣。

请参阅:Will Websockets allow a server to run in the browser?