无法识别客户端http标头何时完成

时间:2012-08-04 21:26:49

标签: java scala websocket

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

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

如何知道客户端已完成发送标头,以便发送回复?

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

GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: 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 ...

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

您使用的是哪个客户?也许客户有问题?

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