Java:如何在执行其他操作时侦听套接字

时间:2015-03-24 01:43:58

标签: java multithreading sockets asynchronous

我开始深入研究Java,并希望澄清一些关于这个主题的想法/问题。

在java中,在代码中执行其他活动时,可以使用哪些选项来侦听端口。然后能够在检测到流量时执行代码。

使用线程实现一个服务器实例是唯一的选择吗? 或者事件处理程序可以提供类似的功能吗?

即使这似乎对我有用,但我确信它不是: 是否java.net.ServerSocket实例甚至是必需的,因为java.net.Socket也可以接收消息?或者java.net.Socket只能从收到的邮件中收到回复。

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

ServerSocket是要在端口上侦听时使用的类。但是在听时要做其他事情需要你使用多个线程。这是因为accept()调用会阻塞,直到建立连接。

答案 1 :(得分:1)

要回答你的'问题',是的,你会想要使用ServerSocket。

然而,为了在听取套接字的同时做其他工作,这是一个并发问题。您必须在后台调度一个将侦听该servlet的线程。在基本层面上,这可以通过创建实现Runnable接口的“Worker”类来实现。 public void run()方法将拥有像通常那样侦听套接字的代码。

一旦定义了一个worker类,就可以创建一个在后台执行套接字监听逻辑的线程。 new Thread(anInstanceOfYourWorkerClass).start();将创建您的线程并运行您的工作逻辑。这当然是一个基本的例子。