在第一类中,具有侦听客户端套接字方法“listen
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语句将退出无限循环。
发布于 2012-10-27 02:30:37
套接字侦听器将消息传递给Second类的一种简单方法是通过BlockingQueue。侦听器将读取套接字输入流,并调用queue.put(...)将任何消息添加到队列中。
然后,第二个类将处于调用queue.take();的循环中,当消息被添加到队列中时,它将返回每条消息。如果您希望队列中的消息数量不受限制,那么LinkedBlockingQueue是可行的。如果您想限制消息,那么有界队列(如ArrayBlockingQueue )可能更合适。
两个线程需要共享相同的BlockingQueue,因此您需要构造它并将其传递给两个线程,或者将一个名为addMessage(...)的方法放在Second类上,而BlockingQueue将位于Second类的内部。然后,监听程序将调用second.addMessage(...);。
https://stackoverflow.com/questions/13092404
复制相似问题