2

我等待客户,ServerSocket.accept()然后像这样处理:

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

我如何知道客户端已完成发送标头以便发送响应?

具体来说,我的意思是这些标题:

获取 /mychat HTTP/1.1
主机:server.example.com
升级:websocket
连接:升级
Sec-WebSocket-Key: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

2

readLine从它读取的每一行的末尾删除\r\n,因此空行只是""没有任何\r\n字符。

于 2012-08-04T21:52:47.287 回答
0

websocket 握手只是一个 http 请求。因此,您应该能够通过回车/换行字符 (\r\n) 判断标题何时结束。

你用的是什么客户端?也许客户有问题?

您知道您不需要自己构建 websockets 库。有许多开源替代品,例如netty的一部分。

于 2012-08-04T21:43:40.957 回答