Basit bir sunucu üzerinde çalışıyorum, nasıl çalıştığını öğrenmek için. Çalışmak için bir java sunucum ve java istemcim var ama aynı java sunucusuna bağlanmak için javascript istemcisi almaya çalışmak beni deli ediyor!Javascript istemcisi java sunucusuna bağlanamıyor
Java sunucusu:
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 istemci: (işleri)
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 istemci:
<!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>
ben almak sunucu ile java istemcisini çalıştırdığınızda:
Starting
While
Accepted
Message from client: I'm the client
Sending message...
Closing socket
While
istemciden
ve çıkışı:
Sending message...
Hi
Yani çalışır.
Starting
While
Accepted
Message from client: GET/HTTP/1.1
Sending message...
Closing socket
While
Ve javascript sayfadaki çıkışı: Ben javascript istemci çalıştırdığınızda, sunucunun çıkışı Ayrıca
Error: [object Event]
Disconnected: undefined
, firefox konsolu Firefox bağlantı kurmak olamaz" diyor ws sunucusunda: // localhost: 9091/". Neyi kaçırıyorum? Teşekkürler!
Teşekkürler! Sayfa bir HTTP yanıtı yazmak ve doğru sec-websocket-kabul anahtarını göndermek için doğru yönü işaret etti ve istemci şimdi sunucuya bağlanıyor :) – Arlo
@Arlo - FYI, zaten bir webSocket sunucusunu uygulayan mevcut sınıflar var Java. Protokolün tamamını yeniden uygulamak yerine bunlardan birini almak isteyebilirsiniz. – jfriend00