Я участие следующих проблем:один сервер нескольких клиентов
- мне нужно написать программу сервера, будет принимать несколько клиентов
- всех клиентов подписываются одни и те же данные с сервера, например, цена акций Обновить.
- каждый клиент может посылать простые команды на сервер, как «вход», «стоп»
Так вот мое решение, так как я не очень Произошел в многопоточном/TCP, я хочу знать, это хорошо решение? если нет, есть ли лучшее решение? нужно ли иметь поток для каждого клиентского сокета? Спасибо BTW: извините за запутывание каждого, это небольшой проект, который включает только 5-10 классов.
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
}
}
}
Если это не домашнее задание, вы должны посмотреть на существующие решения, такие как [JMS] (http://en.wikipedia.org/wiki/Java_Message_Service) вместо того, чтобы начинать с нуля. –
Socket dont 'имеет метод приема ... – JasonHuang