1

在头等舱有方法“听”哪个监听客户端套接字

public void listen() throws IOException {       

        while (true) {
            socket = this.serverSocket.accept();

            DataOutputStream out = new DataOutputStream( socket.getOutputStream() );
            this.outputStreams.put(socket, out);


            Thread miltiServer;

            miltiServer = new Thread() {
                @Override
                public void run() {                    
                    InputStream sin = null;

                    try {                   
                        sin = socket.getInputStream();
                        ObjectInputStream in = new ObjectInputStream(sin);
                        message = (AgentData) in.readObject();

                    } catch (ClassNotFoundException ex) {

                    } catch (IOException ex) {

                    } 
                }
            };

            miltiServer.start();
        }

在第二类中,我需要阅读和分析从客户端套接字接收到的消息。我不知道如何在其他班级收到消息。我有使用 Callable 接口的想法,但是如果我使用它,return 语句将退出不定式循环。

4

1 回答 1

2

您的套接字侦听器将消息传递给您的Second类的一种简单方法是通过BlockingQueue. 侦听器将从套接字输入流中读取并调用queue.put(...)以将任何消息添加到队列中。

然后第二个类将在一个循环调用queue.take();中,当它被添加到队列中时,它将返回每条消息。如果您希望将无限的消息排队,那么LinkedBlockingQueue就可以了。如果您想限制消息,那么有界队列ArrayBlockingQueue可能更合适。

两个线程都需要共享相同的BlockingQueue内容,因此您需要构造它并将其传递给两个线程,或者在您的Second类上放置一个名为类似的方法,addMessage(...)并且BlockingQueue将在您的Second类中。然后听众会打电话给second.addMessage(...);.

于 2012-10-26T18:30:37.090 回答