Java:如何在做其他事情时监听套接字
我开始深入了解Java,并想澄清一些关于该主题的想法/问题 在java中,在代码中执行其他活动时,有哪些选项可用于侦听端口。然后,当检测到流量时,能够执行代码 实现带有线程的服务器实例是唯一的选项吗?Java:如何在做其他事情时监听套接字,java,multithreading,sockets,asynchronous,Java,Multithreading,Sockets,Asynchronous,我开始深入了解Java,并想澄清一些关于该主题的想法/问题 在java中,在代码中执行其他活动时,有哪些选项可用于侦听端口。然后,当检测到流量时,能够执行代码 实现带有线程的服务器实例是唯一的选项吗? 或者事件处理程序可以提供类似的功能吗 尽管这在我看来是可能的,但我肯定不是: 由于java.net.Socket也可以接收消息,所以java.net.ServerSocket实例是否是必需的?或者,java.net.Socket只能从它发出的消息接收响应 感谢您在advanced中提供的帮助。如果
或者事件处理程序可以提供类似的功能吗 尽管这在我看来是可能的,但我肯定不是: 由于
java.net.Socket
也可以接收消息,所以java.net.ServerSocket
实例是否是必需的?或者,java.net.Socket
只能从它发出的消息接收响应
感谢您在advanced中提供的帮助。如果您想在端口上侦听,可以使用ServerSocket类。但要在侦听时执行其他操作,需要使用多个线程。这是因为accept()调用会一直阻塞,直到建立连接为止。要回答您的“附带问题”,是的,您需要使用ServerSocket 但是,对于在侦听套接字的同时执行其他工作,这是一个并发性问题。您必须在后台调度一个线程来侦听该servlet。基本上,这可以通过创建一个实现
Runnable
接口的“Worker”类来实现。public void run()
方法的代码将像通常一样侦听套接字
定义工作类后,可以创建一个线程,该线程将在后台执行套接字侦听逻辑<代码>新线程(anInstanceOfYourWorkerClass).start()代码>将创建线程并运行工作程序逻辑。这当然是一个基本示例。
ServerSocket
是启动初始传入通信请求所必需的。Socket
只能建立输出连接(广义而言)