Java套接字 - 异步等待,同步读取

hmp*_*hmp 1 java sockets

我希望能够异步等待套接字,然后同步读取它:

for (;;) 
{
    while (data available on socket) 
    {
        read message from socket;
        process it;
    }
    do something else;
}
Run Code Online (Sandbox Code Playgroud)

我需要这个,因为我想同时使用来自GUI的消息轮询队列,所以"做其他事情"部分有一个简短的wait().

这是可以使用Java套接字吗?我试图检查.available()DataInputStream与套接字相关联,但

  • 它似乎只在我连接时工作,而不是在我接受连接时(???)
  • 我没有得到关闭连接的迹象.

我尝试使用Selector进行此操作,但它要求套接字通道始终处于非阻塞模式.

Yuv*_*dam 5

Java非阻塞I/O包(java.nio)允许您通过Selectors 从套接字进行异步读取.

查看此链接以获取一些示例以帮助您入门.