5

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

4

2 回答 2

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 将导致服务器接收到的帧为二进制帧(操作码 = 2)。

ws.send(myTypedArray);

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

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

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

ws.binaryType = "blob"; // or "arraybuffer"
于 2012-07-11T20:01:40.327 回答
1

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

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

请参阅:Websockets 是否允许服务器在浏览器中运行?

于 2012-07-09T06:31:50.483 回答