Vì vậy, bây giờ, tôi đang tạo một ứng dụng khách đa nhiệm dựa trên ứng dụng máy khách. Ở phía máy chủ, tôi tạo một luồng cho kết nối mọi thứ được chấp nhận.Gửi tin nhắn đến tất cả khách hàng (Client - Server communication)
Trong lớp chuỗi, tôi tạo một phương thức gửi lệnh cho khách hàng. Những gì tôi chỉ muốn là, làm thế nào để gửi một tham số cho tất cả các khách hàng đang chạy? Đối với tuyên bố đơn giản, tôi chỉ muốn làm cho máy chủ này gửi một tin nhắn đến tất cả các khách hàng kết nối.
Tôi đã đọc this post và tìm phương thức sendToAll(String message)
từ this link. Nhưng khi tôi cố gắng trong mã của tôi, không có phương pháp như thế trong ServerSocket
.
OK đây là mã mẫu của tôi cho máy chủ và chuỗi.
class ServerOne{
ServerSocket server = null;
...
ServerOne(int port){
System.out.println("Starting server on port "+port);
try{
server = new ServerSocket(port);
System.out.println("Server started successfully and now waiting for client");
} catch (IOException e) {
System.out.println("Could not listen on port "+port);
System.exit(-1);
}
}
public void listenSocket(){
while(true){
ClientWorker w;
try{
w = new ClientWorker(server.accept());
Thread t = new Thread(w);
t.start();
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
}
}
protected void finalize(){
try{
server.close();
} catch (IOException e) {
System.out.println("Could not close socket");
System.exit(-1);
}
}
}
class ClientWorker implements Runnable{
Socket client;
ClientWorker(Socket client){
this.client = client;
}
public void run(){
...
sendCommand(parameter);
...
}
public void sendCommand(String command){
PrintWriter out = null;
try {
out = new PrintWriter(client.getOutputStream(), true);
out.println(command);
} catch (IOException ex) {}
}
}
Nhờ sự giúp đỡ :)
câu trả lời của bạn là tuyệt vời, nhưng bạn thiếu vài dấu hai chấm và bạn nên thay đổi 'messages.dequeue(); 'và' messages.enqueue(); 'cho' messages.take(); 'và' messages.put(); ' – Danon
Ngoài ra, bạn có chắc lớp này là an toàn không? Tôi có nghĩa là, những gì nếu tôi gọi sendToOne()/sendToAll tại thời điểm chấp nhận/chủ đề thay đổi clientList? – Danon
@Danon Vui lòng xem chỉnh sửa. – Mordechai