Кажется, у меня возникают проблемы с установлением «правильного» соединения между моим сервером Java и клиентом JavaScript. Похоже, что все в порядке, клиент отправляет свой заголовок в порядке, но это все, что он получает. Функции onopen
или onmessage
вообще никогда не срабатывают.
Вот код для сервера Java:
import java.net.*;
import java.io.*;
public class Server {
static DataOutputStream out;
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8112);
System.out.println("Server Started");
while(true) {
Socket socket = serverSocket.accept();
System.out.println("A client connected");
out = new DataOutputStream(socket.getOutputStream());
//Send a simple-as-can-be handshake encoded with UTF-8
String handshake = "HTTP/1.1 101 Web Socket Protocol Handshake\r" +
"Upgrade: WebSocket\r" +
"Connection: Upgrade\r" +
"WebSocket-Origin: http://localhost\r" +
"WebSocket-Location: ws://localhost:8112/\r" +
"WebSocket-Protocol: sample\r\n\r\n";
out.write(handshake.getBytes("UTF8"));
System.out.println("Handshake sent.");
//Send message 'HI!' encoded with UTF-8
String message = "HI!";
out.write(0x00);
out.write(message.getBytes("UTF8"));
out.write(0xff);
System.out.println("Message sent!");
//Cleanup
socket.close();
out.close();
System.out.println("Everything closed!");
}
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
А вот код для клиента:
<html>
<head>
<meta charset="UTF-8">
<script>
function load() {
var ssocket = new WebSocket("ws://localhost:8112/");
socket.onopen = function(e) { alert("opened"); }
socket.onclose = function(e) { alert("closed"); }
socket.onmessage = function(e) { alert(e.data); }
}
</script>
</head>
<body onload="load();">
</body>
</html>
Почему не срабатывает onopen
или onmessage
? Я пробовал много разных вещей, которые просто не могу этого сделать.
Что я делаю не так?