我目前正在使用Java创建一个通过套接字进行通信的客户端/服务器应用程序。我对这种类型的编程的经验非常有限,我只是从服务器类型的应用程序的客户端/响应中做过请求。现在,我想以相反的方式做到这一点。也就是说,客户端连接到服务器,然后等待服务器定期向其推送消息。
问题是:我如何创建这样的应用程序?或者更重要的是:如何在没有先收到请求的情况下让服务器写入客户端套接字,如何让客户端监听更多消息?
答案 0 :(得分:1)
我认为您正在混合客户端和服务器逻辑,您应该考虑您的服务器是否更像客户端。但好吧......
首先将一些java类作为入口点
您可以创建一个新的选择器,如
// Create a new selector
Selector socketSelector = SelectorProvider.provider().openSelector();
// Create a new non-blocking server socket channel
mServerChannel = ServerSocketChannel.open();
mServerChannel.configureBlocking(false);
// Bind the server socket to the specified address and port
InetSocketAddress isa = new InetSocketAddress(mHostAddress, mPort);
mServerChannel.socket().bind(isa);
// Register the server socket channel, indicating an interest in
// accepting new connections
mServerChannel.register(socketSelector, SelectionKey.OP_ACCEPT);
Selector可以等待启动客户端连接
// Wait for an event one of the registered channels
mSelector.select();
在连接新客户端之后,AbstractSelector可用于向客户端发送响应。
socketChannel.write(buf);