同様の質問を読みましたが、問題は解決しませんでした。
学習のために、独自の Java WebSocket サーバーを構築しようとしています。サーバーは正常にセットアップされ、着信接続を受け入れ、クライアントからハンドシェイク データを取得します。次に、サーバーはハンドシェイクの戻りデータを計算し、それを書き込んでフラッシュしようとします。それにもかかわらず、Web インスペクターでは、クライアントの応答ヘッダーは表示されず、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=
私が開発したPHP WebSocketサーバーでは、これらのヘッダーを送信するだけで機能するため、送信するヘッダーを送信するだけで十分であることに注意してください。