Je me engage les problèmes suivants:un serveur plusieurs clients
- que je dois écrire un programme serveur, acceptera plusieurs clients
- tous les clients sont abonnés les mêmes données du serveur, par exemple le prix des actions mettre à jour.
- chaque client peut envoyer des commandes simples au serveur comme « ouverture de session », « stop »
Voici donc ma solution, puisque je ne suis pas très experianced dans multithread/tcp, je veux savoir est-il un bon Solution? sinon, y a-t-il une meilleure solution? est-il nécessaire d'avoir un thread pour chaque socket client? Merci BTW: désolé de confondre tout le monde, c'est un petit projet qui ne concerne que 5-10 classes.
class AcceptThread {
......
public void run() {
ControlThread controlThread = new ControlThread();
controlThread.start();
Socket socket = new Socket(port);
while (!stop) {
Socket s = socket.accept();
controlThread.addClient (s);
}
}
}
class ControlThread {
Set<Scoket> clients;
SendDataThread sendDataThread;
public ControlThread() {
sendDataThread = new SendDataThread();
sendDataThread.start();
}
public void addClient (Socket socket) {
clients.add(socket);
sendDataThread.addListener(socket);
}
public void run() {
......
for (Socket s : clients) {
if (s.getInputStream().available()) {
//read command from s
}
}
......
}
}
class SendDataThread() {
Set<Scoket> listeners;
public void addListener (Socket s) {
listeners.add(s);
}
public void run() {
for (Socket s: listeners) {
// send data to each listener
}
}
}
À moins que ce soit des devoirs, vous devriez regarder les solutions existantes comme [JMS] (http://en.wikipedia.org/wiki/Java_Message_Service) au lieu de partir de zéro –
Socket dont 'have have method ... – JasonHuang