2012-07-09 12 views
5

Hallo, ich versuche, Dateien zu übertragen. Ich habe einige Programme, die Dateien in Binärdateien konvertieren und sie über ein Netzwerk mit C++ übertragen. Ich habe mich gefragt, ob ich Dateien mit Javascripts und Websockets übertragen könnte? irgendwelche Beispiele, wie man mein C++ Programm in Javascript einbaut, würde geschätzt werden. Vielen Dank.Übertragung von Dateien mit Javascript über Websockets

+0

Ich bin auch interessiert, wenn dies möglich ist. – DasBoot

Antwort

7

Javascript hat zwei neue binäre Typen: typisierte Arrays (arraybuffers) und Blobs (im Grunde Dateien).

WebSockets unterstützen das Senden und Empfangen von typisierten Arrays und Blobs.

Um Daten zwischen zwei Browsern mit WebSockets zu übertragen, benötigen Sie einen Server, mit dem beide Benutzer eine Verbindung herstellen können (die Browser-Unterstützung von WebSocket ist zu diesem Zeitpunkt nur Client).

Wenn Sie einen vorhandenen Server in C++ haben, der den Dateitransport unterstützt, sollten Sie in der Lage sein, den WebSocket Server-Support relativ einfach hinzuzufügen. Sie können WebSocket Client- und Server-Implementierungen auf dieser Seite finden: http://en.wikipedia.org/wiki/Comparison_of_WebSocket_implementations

In JavaScript eine Verbindung zu einem WebSocket Server wie folgt Sie etwas tun, um festzustellen:

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

Die Methode send() Unterstützung normale Strings, getippt Arrays oder Blobs. Das Senden von typisierten Arrays und Blobs führt dazu, dass die Frames vom Server als binäre Frames empfangen werden (Opcode = 2).

ws.send(myTypedArray); 

Nachrichten empfangen Sie eine Nachricht Handler registrieren:

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

Wenn der Server der onmessage Daten Eigenschaft des Ereignisses eine Binärrahmens/Nachricht sendet dann entweder eine typisierte Array oder Blob enthält je nach die Einstellung des Attributs binaryType. Sie können den Typ der Binärdaten ändern, die so empfangen werden:

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

Was Sie versuchen, ist nicht möglich. WebSocket kann nur in einem Client-Modus betrieben werden; Es kann keine Verbindungen von einem anderen WebSocket-Client (z. B. einem anderen Browser) annehmen.

Es ist möglich, WebSocket Kunden miteinander über einen Server zu anschließen, aber es ist nicht mehr wirklich Peer-to-Peer an diesem Punkt, also bin ich nicht sicher, ob das nicht mehr wirklich nützlich oder interessant.

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

+1

Danke, wenn Sie Beispiele dafür geben können, wie man es über einen Server macht, würde es geschätzt werden. =) – DasBoot

Verwandte Themen