Socket Server с несколькими клиентами в Java - PullRequest
2 голосов
/ 14 июля 2011

Я должен создать сервер сокетов, который будет слушать несколько клиентов. Предположим, что к серверу одновременно подключено 6 клиентов, и каждый из них отправляет на сервер несколько команд одновременно. Если эти клиенты отправляют сообщение на сервер каждую 1 секунду, как я могу обработать эти сообщения от 6 клиентов на стороне сервера, чтобы сохранить их в таблице и подтверждение для каждого клиента.

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

Пожалуйста, дайте мне идею подойти к этому вопросу.

Ответы [ 2 ]

3 голосов
/ 14 июля 2011

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

class Server {

    ClientThread    threads[];
    int             size;
    ServerSocket    serverSocket;
    boolean         active;

    Server() throws Exception {
        /* initialize connection */
        active = true;
        listen();
    }

    void listen() throws Exception {
        while ( active ) {
            Socket clientSocket = serverSocket.accept();
            threads[ size++ ] = new ClientThread( clientSocket );
            threads[ size - 1 ].start();
        }
    }
}

class ClientThread extends Thread {

    OutputStream    out;
    InputStream     in;
    boolean         active;

    ClientThread( Socket clientSocket ) throws Exception {
        out = clientSocket.getOutputStream();
        in = clientSocket.getInputStream();
    }

    public void run() {
        active = true;
        while ( active ) {
            listen();
        }
    }

    private void listen() {
        try {
            int res = process( in.read() );
            out.write( res );
        } catch ( Exception e ) {}
    }

    private int process( int b ) {
        return -1;
    }
}
0 голосов
/ 14 июля 2011

По какой причине вы не можете использовать контейнер сервлета для этого?Это 10 строк кода в Servlet + Tomcat / Jetty.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...