У меня настроен простой сервер и клиент, где сервер ждет, когда клиент что-то отправит, а затем отправит ответ. Но недостатком является то, что оба должны слушать, что сокет получает что-то. Что, если я хочу, чтобы это было более гибким в общении? Я думал о событиях на основе событий, поэтому каждый раз, когда сокет получал что-то, он вызывал метод для его обработки, вместо того чтобы приостанавливать программу ждать socket.nextLine().
Вот как выглядит мой код сервера:
try{
ss = new ServerSocket(port);
s = ss.accept();
in = new Scanner(s.getInputStream());
out = new PrintWriter(s.getOutputStream(), true);
while(!s.isClosed()){
String input = in.nextLine();
handleInput(input);
}
} catch (Exception e){}
И в handleInput() я отправляю ответ клиенту.
Если вы хотите быть событием, основанным на том, что клиент делает что-то, когда сервер отправляет пакет, то многопоточность.
Thread t = new Thread(new Runnable() {
public void run() {
someMethod(in.nextLine());
}
});
t.start();
Вы должны были бы сделать in
поле в классе вмещающего.
Это приведет к выполнению вашей программы, и когда он получит пакет, он вызовет someMethod()
.
Конечно, это открывает множество проблем, связанных с многопотоковой обработкой, но это действительно единственный способ сделать то, что вы хотите.