java - java中具有多个客户端的套接字服务器

标签 java sockets

我必须创建一个套接字服务器来监听多个客户端。假设有 6 个客户端同时连接到服务器,每个客户端同时向服务器发送一些命令。如果这些客户端每 1 秒向服务器发送一次消息,我如何处理来自服务器端 6 个客户端的这些消息以将其存储在表中并向每个客户端确认。

我如何处理来自客户端的这些输入。我是否必须创建 6 个线程来处理来自客户端的这些输入。

请给我一个解决这个问题的想法。

最佳答案

为每个客户端连接创建一个新线程,并不断对每个线程中的流进行阻塞读取以查找要处理的数据。

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;
    }
}

关于java - java中具有多个客户端的套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6688746/

相关文章:

c - 如何仅在前一个命令在使用套接字的服务器/客户端程序中完成后才执行命令

c - getsockopt() 中的 optlen 参数

java - 由于输入字符串,RSA 解密失败

java - 如何从 arraylist 中获取随机项目而不在 android 中重复

java - 如何使线程崩溃或故意挂起线程?

javascript - node.js 和 socket.io 代码不工作

c - 绑定(bind)到选定的接口(interface)

java - Spring 无法加载 JDBC 驱动程序类错误

java - 如何在Jooq自定义转换器中应用MySQL加密函数?

PHP socket_connect() 权限被拒绝