Я хочу создать многопоточный сервер, который одновременно разговаривает с несколькими клиентами. это проблема:сервер многопоточно отвечает только на одного клиента сразу
- Сервер может отвечать только на одного клиента одновременно. Я не могу отправить ничего от второго клиента, если первый не получил ответа сервера.
это код моего сервера:
import java.io.*;
import java.net.*;
public class Serveur extends Thread{
private MyFrame mf;
@SuppressWarnings("unused")
private FileAttente file;
private ServerSocket serveur ;
public Serveur(int port,MyFrame f,FileAttente file) throws IOException{
serveur = new ServerSocket(port);
this.mf = f;
this.file=file;
}
@Override
public void run() {
// TODO Auto-generated method stub
mf.console.append("\nServeur en écoute ... ");
while(true){
try {
SoClient threadClient = new SoClient(this.serveur.accept());
threadClient.start();
mf.console.append("\nUn nouveau client s'est connecté");
} catch (IOException e) {e.printStackTrace();}
}
}
}
У меня есть эта строка: mf.console.append("\nUn nouveau client s'est connecté");
выполняется после приема каждого сообщения от клиента. Обычно он должен выполняться только тогда, когда приходит новый клиент.
это код гнезда, где я поставил все операции между клиентом и сервером:
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class SoClient extends Thread {
static MyFrame mf;
FileAttente file;
public static Socket client;
public SoClient(Socket client){
this.client=client;
}
public void run(){
MyFrame.console.append("\nConnexion établi : "+client.getInetAddress());
//Envoie et reception
try {
InputStream in = this.client.getInputStream();
OutputStream out = client.getOutputStream();
sleep(2);
DataInputStream is = new DataInputStream(in);
@SuppressWarnings("deprecation")
String request = is.readLine();
MyFrame.console.append("\nMessage d'un Client :"+request);
DataInputStream din = new DataInputStream(in);
sleep(2);
String chaine_Client=din.readUTF();
MyFrame.console.append("Client :"+chaine_Client);
client.close();
} catch (IOException | InterruptedException e) {}
}
}
Итак, что я хочу сделать, это отправка широковещательного сообщения с сервера для всех клиентов, которые подключены или отправлены эхо-сообщение. Для клиента я создал класс, и я создаю его столько времени, сколько захочу. Класс Client и классы серверов находятся в двух проектах diffirents в Eclipse.
Вы пробовали использовать рамки проекта Netty? – HCarrasko
Нет, я никогда не использовал его – Somar
Вы заглянули в RMI для своего сервера? Он обрабатывает одновременное обращение нескольких клиентов на сервер. Для другого пути (трансляции) вашим клиентам также потребуется экспортировать удаленный объект. – edharned