私は単純なサーバで作業しています。私は動作するようにJavaサーバーとJavaクライアントを持っていますが、同じJavaサーバーに接続するためのjavascriptクライアントを取得しようとすると、私は夢中になります!Javascriptクライアントはjavaサーバに接続できません
Javaサーバ:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class DateServer {
public static void main(String[] args) throws IOException {
ServerSocket listener = new ServerSocket(9091);
System.out.println("Starting");
try {
while (true) {
System.out.println("While");
Socket socket = listener.accept();
System.out.println("Accepted");
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = input.readLine();
System.out.println("Message from client: " + msg);
try {
PrintWriter out =
new PrintWriter(socket.getOutputStream(), true);
System.out.println("Sending message...");
out.println("Hi");
} finally {
System.out.println("Closing socket");
socket.close();
}
}
}
finally {
listener.close();
}
}
}
のJavaクライアント:(作品)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
public class DateClient {
public static void main(String[] args) throws IOException {
Socket s = new Socket("localhost", 9091);
try {
PrintWriter out =
new PrintWriter(s.getOutputStream(), true);
System.out.println("Sending message...");
out.println("I'm the client");
} finally {
//System.out.println("Closing socket");
//s.close();
}
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
String msg = input.readLine();
System.out.println(msg);
JOptionPane.showMessageDialog(null, msg);
s.close();
System.exit(0);
}
}
JavaScriptクライアント:
<!DOCTYPE html>
<html>
<head>
<title>Echo Test</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
</head>
<body>
<div id="messages"></div>
<script type="text/javascript">
var connection = new WebSocket('ws://localhost:9091/');
var messages = document.getElementById("messages");
// When the connection is open, send some data to the server
connection.onopen = function (e) {
writeResponse('sent');
connection.send('Ping');
}
// Log errors
connection.onerror = function (error) {
writeResponse('Error: ' + error);
}
connection.onclose = function(e){
writeResponse("Disconnected: " + e.data);
}
// Log messages from the server
connection.onmessage = function (e) {
writeResponse('Server: ' + e.data);
}
function writeResponse(text){
messages.innerHTML += "<br/>" + text;
}
</script>
</body>
</html>
私は私が得るサーバとJavaクライアントを実行すると:
Starting
While
Accepted
Message from client: I'm the client
Sending message...
Closing socket
While
クライアントから
と出力:
Sending message...
Hi
ので、動作します。
Starting
While
Accepted
Message from client: GET/HTTP/1.1
Sending message...
Closing socket
While
とJavaScriptページの出力は次のとおりです:私はjavascriptのクライアントを実行すると、サーバーの出力がある。また
Error: [object Event]
Disconnected: undefined
、FirefoxのコンソールはFirefoxがへの接続を確立することはできません」と言いますserver at ws:// localhost:9091/"と入力します。私は何が欠けていますか?ありがとう!
ありがとうございました!このページはHTTP応答を書いて正しいsec-websocket-acceptキーを送る正しい方向を指していました。クライアントは今サーバに接続します:) – Arlo
@Arlo - FYI、webSocketサーバを実装している既存のクラスがありますJava。自分自身でプロトコル全体を再実装するのではなく、それらのうちの1つを取得することができます。 – jfriend00