【问题标题】:Socket Server with multiple client in javajava中具有多个客户端的Socket服务器
【发布时间】:2011-07-14 05:12:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: java sockets


    【解决方案1】:

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

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

    【讨论】:

    • +1,但有保留。我不会称之为“轮询”,我会称之为阻塞读取,你当然应该对 EOS 做点什么。
    • 是的,虽然我知道 read() 块,但 while 循环让我一开始就想到了轮询。感谢您的提醒。
    【解决方案2】:

    您有什么理由不能使用 servlet 容器来执行此操作?这是 Servlet + Tomcat/Jetty 中的 10 行代码。

    【讨论】:

    • 要求在socket中。无论如何你能指导我如何在servlet中做。
    猜你喜欢
    • 2011-09-22
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    相关资源
    最近更新 更多