2011-10-26 13 views
3

私はWebSocketサーバーをJavaとC++の両方に書き込もうとしていますが、今は固執しています。 javaとjava.net.ServerSocket/java.net.Socketを使用して接続を確立し、正常にハンドシェイクを行いましたが、WebSocketからJava Serverに送信されたデータは、私が期待したものではありません。呼び出されたWebSocketサーバーの作成

var count = 0; 
function loop(){ 
    websocket.send("loop: " + count + "\n"); 
    count++; 

    setTimeout(loop, 100); 
} 

ラインは、すべてのwebsocket.sendのためにすべての今してではなく、フィードを使用してJavaサーバーが(これを受けて):

このようなジャバスクリプトからのメッセージを送信する場合。

?‡½÷「~Ñ~Mè‡×?‡AI3-¡C{に?‡OEI [UA¢4%¶íi?‡$ÍåøH¢SIO?‡・†ÞžÛé±î?|ê? ‡ '½Ø... KO・õ?í?‡DOU'
½'á^ OI?‡+ U?YG-A)Ùº?‡>?
Ë÷»¡AB 5?‡mÉŒQ|ã!Wéμ? :J FVの%のF6

JavaサーバははBufferedReader.readLineを使用してソケット()から値を取得し

BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
String line =socketReader.readLine(); 

これは、ハンドシェイクのために正常に動作し、すべてのハンドシェークデータが読み取り可能であるが、それは後に動作しません。握手は

ハンドシェイク後のデータは何とか暗号化されていますか?どのように私はそれを読むことができますか?

EDIT:

プログラムファイル:

SocketConnectTest.html
ServerTest.java
ClientSessionTest.java
ResponseGenerator.java
output

だけSを実行しますerverTest.javaを開き、SocketConnectTest.htmlを開きます。
ClientSessionTest.initClientListener()は、クライアントからのメッセージを処理します。

SOLUTION:解決のために は、データがウェブソケットに出くわすpimvdbsは以下の投稿を参照してHow to (de)construct data frames in WebSockets hybi 08+?

+0

サーバーにtelnetを使用できますか?これによりプレーンテキストを入力し、何が送信されているかを確認することができます(HTTPサーバーでこれを行うこともできます) –

+0

圧縮されている可能性があります。 'accept-encoding'ヘッダに' gzip'が含まれていますか?もしそうなら、それを取り出して、もう一度やり直してください。 – trojanfoe

+0

@trojanfoe gzipを削除しようとしましたが、それを同一性に置き換えようとしました。どちらも役に立たなかった。 – Markus

答えて

4

で彼の答えは、文字列符号化データを、生ではありません。

パケットが0x00バイトで囲まれているため、受信データの周囲にBufferedReaderをラップしないことをお勧めします。あなたが見ている狂った文字は、Javaがデータが入っているエンコーディングを理解していない結果です。

文字とコントロールの部分にデータを分割する責任があります。データを適切な領域に分割したら、そのデータを文字列としてデコードすることができます。

+0

私はsocket.getInputStream()でそれを読み取ろうとしました。読み取り(バフ);今。 read()はバイト配列を取得するたびに、最初の2バイトは-127と-123です。しかし、私はいつも同じメッセージを送信しても、次のバイトはランダムに見えます。 – Markus

+0

私たちはおそらく、あなたがどのように送信しているのか、そしてそのメッセージをより詳細に調べる必要があるでしょう。たとえば、送信するときにデータを正しくラッピングしていますか? –

+0

最初の投稿にソースを追加しました。 メッセージは何とか折り返されているはずですか?私が見たチュートリアルsend()で生の文字列を送信するのを見たので、これもやってみましょう。 – Markus

関連する問題