0

JavaScriptWebSocketとVisualBasic.Netで記述されたTCPサーバー/クライアントアプリケーション間の接続を取得しようとしています。私の問題は、ハンドシェイクが失敗することです。ローカルWebサイトからハンドシェイク要求を受け取りましたが、応答を受け入れません。

JavaScriptファイルのコード:

<script type="text/javascript">
        var ws;
        function connect() {
            if("WebSocket" in window) {
                debugger;
                ws = new WebSocket("ws://192.168.193.178:1925");

                ws.onopen = function() {
                    alert("Connection established");
                };
                ws.onmessage = function(evt) {
                    var received_msg = evt.data;
                    alert("Message is received: " + received_msg);
                };
                ws.onerror = function(evt) {
                    alert("Error");
                    var received_msg = evt.data;
                    alert("Error: " + received_msg);
                };
                ws.onclose = function() {
                    // websocket is closed.
                    alert("Connection closed");
                };

                //ws.send("Test");
                //ws.close();
            } else {
                alert("WebSocket NOT supported by your Browser!");
            }
        }
        function disconnect() {
            ws.close();
        }
        function send(message) {
            ws.send(message);
            alert("Sent: " + message);
        }

    </script>

VB.Netコード出力:

Received:
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: 192.168.193.178:1925
Origin: http://127.0.0.1:8020
Sec-WebSocket-Key: eGzO0afUD5jCeUdzdoxwjw==
Sec-WebSocket-Version: 13

Sent:
HTTP/1.1 101 Web Socket Protocol Handshake\r\n
Upgrade: WebSocket\r\n
Connection: Upgrade\r\n
Sec-WebSocket-Origin: null\r\n
Sec-WebSocket-Accept: NzU3M2IwYzk0ZWFmYjg4MzMyZWI1ODhhZWI4NWUyZDE1YWU2YzhlNA==\r\n
\r\n

WebSocketにハンドシェイクを受け入れさせることができません。誰かが私を助けてくれることを願っています。たぶん、ハッシュ生成にエラーが含まれていますか?

編集:

正しいSec-WebSocket-Accept文字列(dXOwyU6vuIMy61iK64Xi0VrmyOQ =)を取得しましたが、とにかくWebSocketはハンドシェイク応答を処理していないようです。Chromeデベロッパーツールを使用してデバッグしようとしましたが、有用な情報が得られません。任意のヒント?

4

1 に答える 1

2

1つのことがすぐに突き出ます。サーバー応答のSec-WebSocket-Accept値は、正しい値がどのように見えるかよりもはるかに長くなります。実際、そのキーの正しい値は「dXOwyU6vuIMy61iK64Xi0VrmyOQ=」である必要があります。私の推測では、SHA1結果の文字列表現でbase-64エンコーディングを実行していると思います。エンコードは、SHA1結果のバイト表現で行う必要があります。

于 2012-05-05T20:02:13.527 に答える