我目前正在用 Java 制作一个通过套接字进行通信的客户端/服务器应用程序。我在这种类型的编程方面的经验非常有限,而且我只做过来自客户端的请求/来自服务器类型应用程序的响应。现在,我想反其道而行之。也就是说,客户端连接到服务器,然后等待服务器定期向它推送消息。
问题是:我该如何创建这样的应用程序?或者更重要的是:如何让服务器在不首先收到请求的情况下写入客户端套接字,以及如何让客户端监听更多消息?
我认为您正在混合客户端和服务器逻辑,您应该考虑您的服务器是否更像客户端。但是没问题...
首先一些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);
选择器可以等待启动客户端连接
// Wait for an event one of the registered channels
mSelector.select();
连接新客户端后,可以使用 AbstractSelector 向客户端发送响应。
socketChannel.write(buf);