gpt4 book ai didi

Java WebSocket 服务器 OutputStream 不刷新

转载 作者:行者123 更新时间:2023-11-29 05:55:35 25 4
gpt4 key购买 nike

我读过 similar question ,但我的问题没有解决。

为了学习,我正在尝试构建自己的 Java WebSocket 服务器。服务器设置正常,它接受传入连接并从客户端获取握手数据。然后我的服务器计算握手返回数据并尝试写入并刷新它。尽管如此,在 Web 检查器中,没有显示客户端的响应 header ,并且 onopen-JavaScript 事件永远不会被触发。

String EOL = System.getProperty("line.separator"); // actually a class-defined constant

BufferedReader inputStream = currentClient.getInputStream();
OutputStream outputStream = currentClient.getOutputStream();

String inputLine;
String handshake = "";

try {

if(!inputStream.ready()){ continue; }

System.out.println("Receiving:\n");

while ((inputLine = inputStream.readLine()).length() > 0) {

if(inputLine.startsWith("Sec-WebSocket-Key: ")){

String inputKey = inputLine.replace("Sec-WebSocket-Key: ", "");
String outputKey = WebSocket.getWebSocketKey(inputKey);

handshake += "HTTP/1.1 101 Switching Protocols"+EOL;
handshake += "Upgrade: websocket"+EOL;
handshake += "Connection: Upgrade"+EOL;
handshake += "Sec-WebSocket-Accept: "+outputKey;

}

System.out.println(inputLine);

}

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("\n\nSending:\n");

System.out.println(handshake);
try {
outputStream.write(handshake.getBytes(Charset.forName("UTF-8")));
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}

下面是我得到的示例:

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:65432
Origin: http://localhost
Sec-WebSocket-Key: ph1CO1PCF60uojeP+nql5A==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame

以及我尝试发送的内容:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: Z2Vy9p7Lp+MZPdZOe+L5GhVBDpc=

我想指出,发送我发送的 header 应该足够了,因为在我开发的 PHP WebSocket 服务器中,发送的不超过这些 header 就可以了。

最佳答案

websocket 握手是一个 HTTP 请求,后面跟着一个 HTTP 响应。 RFC2616表示 HTTP 的行尾标记是 CRLF(“\r\n”)。

HTTP 请求以双换行符结尾(“\r\n\r\n” - 参见 RFC 的第 4 节); websocket 握手响应是 HTTP 响应,因此也需要像这样结束。

关于Java WebSocket 服务器 OutputStream 不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12295929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com