我在开发包括文件共享的聊天应用程序时遇到了麻烦。这是一个基于服务器和客户端的桌面应用程序,我能够单独开发聊天和文件共享。现在我想合并两个项目,并有问题。有没有可能在单线程中使用多个套接字,比如main thread.Or我必须使用一个用于聊天,另一个用于文件sharing.Please帮助我。
发布于 2015-09-07 05:29:47
我认为这是可能的,但在同一线程中,一个套接字的操作必须等待来自annother的所有操作完成。如果您希望同时执行这两个操作,请在不同的线程中执行。希望这能有所帮助:)
发布于 2021-12-11 03:58:25
是的,单个线程可以使用多个套接字。请参阅Selector API.
基本思想是,线程中的代码需要知道它需要读取或写入的所有可选通道(套接字、打开的文件等)。它向选择器注册通道。然后,您进行select调用,该调用将(例如)阻塞,直到注册的通道之一就绪;例如,具有现在可以读取的数据的套接字……而不会阻塞。
这很复杂,但我建议你读读贝尔登的Introduction to the Java NIO Selector,其中包括一个例子,而不是在这里解释所有的东西。
但底线是,使用Selector可能需要对现有代码进行重大重组。如果您的代码使用(例如)第三方库来执行I/O,则此方法可能不起作用。使用多线程可能是一个更简单的选择。
https://stackoverflow.com/questions/32428359
复制相似问题