Я запрограммировал Java WebSocket Server на основе этого Руководства .
Сервер пока работает очень хорошо, но как я могу читать и отправлять сообщения от / к клиенту на этой основе?
ServerSocket server = new ServerSocket(200);
try
{
while(true)
{
System.out.println("Socket Server started on Port 200. Waiting for connections...");
// Wait for Client ...
Socket client = server.accept();
System.out.println("A client connected.");
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
Scanner s = new Scanner(in, "UTF-8");
try
{
String data = s.useDelimiter("\\r\\n\\r\\n").next();
System.out.println(data);
Matcher get = Pattern.compile("^GET").matcher(data);
if (get.find())
{
Matcher match = Pattern.compile("Sec-WebSocket-Key: (.*)").matcher(data);
match.find();
byte[] response = ("HTTP/1.1 101 Switching Protocols\r\n"
+ "Connection: Upgrade\r\n"
+ "Upgrade: websocket\r\n"
+ "Sec-WebSocket-Accept: "
+ Base64.getEncoder().encodeToString(MessageDigest.getInstance("SHA-1").digest((match.group(1) + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").getBytes("UTF-8")))
+ "\r\n\r\n").getBytes("UTF-8");
out.write(response, 0, response.length);
byte[] decoded = new byte[6];
byte[] encoded = new byte[] { (byte) 198, (byte) 131, (byte) 130, (byte) 182, (byte) 194, (byte) 135 };
byte[] key = new byte[] { (byte) 167, (byte) 225, (byte) 225, (byte) 210 };
for (int i = 0; i < encoded.length; i++) {
decoded[i] = (byte) (encoded[i] ^ key[i & 0x3]);
}
}
// Read Messages from Client:
//BufferedReader clientInputReader = new BufferedReader(new InputStreamReader(in));
//String line = clientInputReader.readLine();
//System.out.println(line);
// Send Message to Client:
//PrintWriter writer = new PrintWriter(out, true);
//writer.println("Test");
}
finally
{
s.close();
}
}
}
finally
{
server.close();
}
Для чтения сообщений я пробовал следующее, но функция readLine ( ) никогда ничего не возвращал:
BufferedReader clientInputReader = new BufferedReader(new InputStreamReader(in));
String line = clientInputReader.readLine();
Для отправки сообщений я пробовал следующее, но onMessage () в JS так и не получил вызова:
PrintWriter writer = new PrintWriter(out, true);
writer.println("Test");
JS Код:
var wsUri = "ws://localhost:200";
websocket = new WebSocket(wsUri);
// ... onOpen()
websocket.send("Test\n");