2012-07-09 33 views
5

你好我正在尝试传输文件。我有一些程序将文件转换为二进制文件,并通过网络使用C++进行传输。我想知道我是否可以使用javascript和websockets传输文件?任何关于如何将我的C++程序整合到JavaScript的例子将不胜感激。谢谢。用JavaScript通过websockets传输文件

+0

我也有兴趣如果这是可能的。 – DasBoot 2012-07-09 06:37:49

回答

7

JavaScript有两个新的二进制类型:类型数组(arraybuffers)和斑点(基本文件)。

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将导致服务器接收的帧作为二进制帧(操作码= 2)。如果服务器发送一个二进制帧/消息,则该事件的onMessage数据属性将包含或者根据类型化的阵列或团块

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

ws.send(myTypedArray); 

要接收消息你注册消息处理binaryType属性的设置。您可以更改接收到的二进制数据的类型,如下所示:

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

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

可以通过服务器将WebSocket客户端连接到另一个服务器,但此时它不再是真正的点对点,所以我不确定这是否真的有用或有趣。

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

+1

谢谢,如果你能提供关于如何通过服务器做到这一点,将不胜感激的例子。 =) – DasBoot 2012-07-09 06:33:10