Сеть на основе событий

1

У меня настроен простой сервер и клиент, где сервер ждет, когда клиент что-то отправит, а затем отправит ответ. Но недостатком является то, что оба должны слушать, что сокет получает что-то. Что, если я хочу, чтобы это было более гибким в общении? Я думал о событиях на основе событий, поэтому каждый раз, когда сокет получал что-то, он вызывал метод для его обработки, вместо того чтобы приостанавливать программу ждать 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() я отправляю ответ клиенту.

  • 0
    Вы можете взглянуть на SocketChannel ( docs.oracle.com/javase/7/docs/api/java/nio/channels/… ). Я не уверен, что это именно то, что вы хотите. Но они очень эффективны.
  • 2
    Прямо сейчас вы создаете даже управляемую сеть - вы ждете ввода, прежде чем что-то делать. Я бы порекомендовал вам создать целый отдельный класс для обработки соединений. Каждый раз, когда вы принимаете соединение, передавайте его этому классу и запускайте поток, чтобы ваш сервер мог продолжать слушать.
Показать ещё 1 комментарий
Теги:
sockets

1 ответ

0

Если вы хотите быть событием, основанным на том, что клиент делает что-то, когда сервер отправляет пакет, то многопоточность.

Thread t = new Thread(new Runnable() {
    public void run() {
        someMethod(in.nextLine());
    }
});
t.start();

Вы должны были бы сделать in поле в классе вмещающего.

Это приведет к выполнению вашей программы, и когда он получит пакет, он вызовет someMethod().

Конечно, это открывает множество проблем, связанных с многопотоковой обработкой, но это действительно единственный способ сделать то, что вы хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню