Próbuję zrobić połączenie między serwerem w Javie i klienta JavaScript ale dostaję ten błąd po stronie klienta:serwer Java JavaScript WebSockets klienta
związku websocket do „WS://127.0.0.1:4444/”failed: Connection zamknięte przed otrzymaniem odpowiedzi handshake
To może pozostaje na openning stan, ponieważ funkcja connection.onopen
nigdy nie jest wywoływana. console.log('Connected!')
nie jest wywoływany.
Czy ktoś może dać mi znać, co się tutaj dzieje?
Server
import java.io.IOException;
import java.net.ServerSocket;
public class Server {
public static void main(String[] args) throws IOException {
try (ServerSocket serverSocket = new ServerSocket(4444)) {
GameProtocol gp = new GameProtocol();
ServerThread player= new ServerThread(serverSocket.accept(), gp);
player.start();
} catch (IOException e) {
System.out.println("Could not listen on port: 4444");
System.exit(-1);
}
}
}
ServerThread
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread extends Thread{
private Socket socket = null;
private GameProtocol gp;
public ServerThread(Socket socket, GameProtocol gp) {
super("ServerThread");
this.socket = socket;
this.gp = gp;
}
public void run() {
try (
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
) {
String inputLine, outputLine;
while ((inputLine = in.readLine()) != null) {
outputLine = gp.processInput(inputLine);
System.out.println(outputLine);
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
GameProtocol
public class GameProtocol {
public String processInput(String theInput) {
String theOutput = null;
theOutput = theInput;
return theOutput;
}
}
Client
var connection = new WebSocket('ws://127.0.0.1:4444');
connection.onopen = function() {
console.log('Connected!');
connection.send('Ping'); // Send the message 'Ping' to the server
};
// Log errors
connection.onerror = function (error) {
console.log('WebSocket Error ' + error);
};
// Log messages from the server
connection.onmessage = function (e) {
console.log('Server: ' + e.data);
};
próbowałem to i to działało dobrze ... Wha t Czy używasz przeglądarki do testu? Czy jest też jakaś zapora ogniowa, która mogłaby zablokować/zepsuć odpowiedź? – Igor
Używam Chrome 55. Nie widzę. Dodatkowo, jeśli wydrukuję odpowiedź po stronie serwera, otrzymałem komunikat, który umieściłem powyżej. – agfac
Wszystko wydaje się ok ... Może, spróbuj innego portu? Tak jak 12000 lub więcej, słyszałem, że niektóre systemy nie lubią niskich numerów portów ... Po prostu spekuluję, ponieważ nie mam pojęcia, jaka może być różnica między naszymi ustawieniami ... – Igor