26

プロトコルがどのように機能するかを知るために、リファレンス websocket エコー サーバーに「手動で」接続しようとしています (そのために socat を使用しています)。ただし、サーバーは常に応答を提供せずに接続を閉じます。理由はありますか?

これが私がすることです:

socat - TCP:echo.websocket.org:80

次に、ターミナルに次のテキストを貼り付けます。

GET /?encoding=text HTTP/1.1
Origin: http://www.websocket.org
Connection: Upgrade
Host: echo.websocket.org
Sec-WebSocket-Key: P7Kp2hTLNRPFMGLxPV47eQ==
Upgrade: websocket
Sec-WebSocket-Version: 13

同じマシン上のFirefoxで、開発者ツールとの接続のパラメーターを盗聴しましたが、これは問題なく動作します。したがって、それらは正しいと思います。ただし、その後、サーバーは応答を提供せずにすぐに接続を閉じます。なんで?プロトコルを「手動で」実装するにはどうすればよいですか?

端末で test と入力し、入力した内容をサーバーに返信させたいと思います (Web ブラウザーで動作します)。

4

3 に答える 3

31

\n (ライン フィード) をCRLF (キャリッジ リターンとライン フィード)に変換するようにソケット ストリームを変更する必要があると思います。実行info socatすると、この修飾子を含む詳細情報が生成されます。

crnl   Converts the default line termination character NL ('\n',  0x0a)
       to/from CRNL ("\r\n", 0x0d0a) when writing/reading on this chan-
       nel (example).  Note: socat simply strips all CR characters.

だから私はあなたがこれを行うことができるはずだと思います:

socat - TCP:echo.websocket.org:80,crnl
于 2014-10-30T05:13:43.410 に答える