2012-07-09 127 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