我等待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 ...
答案 0 :(得分:2)
readLine
会从其读取的每一行的末尾删除\r\n
,因此空行只有""
而没有任何\r
或\n
个字符。
答案 1 :(得分:0)
websocket握手只是一个http请求。因此,您应该能够通过回车符/换行符(\ r \ n)来判断标题何时结束。
您使用的是哪个客户?也许客户有问题?
您知道自己不需要构建websockets库。有许多开源替代品,就像netty中的一部分一样。