2

クライアントを待ってServerSocket.accept()から、次のように処理します。

val in = new BufferedReader(new InputStreamReader(socket.getInputStream()))
var line = in.readLine()
while (line != null) {
//...
line = in.readLine()
}

応答を送信するために、クライアントがヘッダーの送信を終了したことをどのように知ることができますか?

具体的には、次のヘッダーを意味します。

GET /マイチャット HTTP/1.1
ホスト: server.example.com
アップグレード: ウェブソケット
接続: アップグレード
Sec-WebSocket キー: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: チャット
Sec-WebSocket-バージョン: 13
オリジン: http://example.com

説明のように: http://en.wikipedia.org/wiki/WebSocket

私は試した:

if (line.contains("\r\n")) {
    println("1")
}
if (line.contains("\r")) {
    println("2")
}
if (line.contains("\n")) {
    println("3")
}

しかし、うまくいきません...

うまくいったのはline.isEmpty(). しかし、ストリームには何かが含まれている必要があり、すべての内容が false を返すため、奇妙です...

4

2 に答える 2

0

Websocket ハンドシェイクは単なる http リクエストです。したがって、キャリッジ リターン/ライン フィード文字 (\r\n) によってヘッダーがいつ終了するかがわかります。

どのクライアントを使用していますか? クライアントに問題があるのではないでしょうか?

Websockets ライブラリを自分で構築する必要がないことはわかっています。nettyの一部としてのような多くのオープンソースの代替手段があります。

于 2012-08-04T21:43:40.957 に答える