【问题标题】:Can't recognize when the client http headers are finished无法识别客户端 http 标头何时完成
【发布时间】:2012-08-04 21:26:48
【问题描述】:

我用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
主机: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...

【问题讨论】:

    标签: java scala websocket


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我更改了标题以使问题更笼统(http 标头),谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      相关资源
      最近更新 更多