0

我目前正在用 Java 制作一个通过套接字进行通信的客户端/服务器应用程序。我在这种类型的编程方面的经验非常有限,而且我只做过来自客户端的请求/来自服务器类型应用程序的响应。现在,我想反其道而行之。也就是说,客户端连接到服务器,然后等待服务器定期向它推送消息。

问题是:我该如何创建这样的应用程序?或者更重要的是:如何让服务器在不首先收到请求的情况下写入客户端套接字,以及如何让客户端监听更多消息?

4

1 回答 1

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);

选择器可以等待启动客户端连接

// Wait for an event one of the registered channels
mSelector.select();

连接新客户端后,可以使用 AbstractSelector 向客户端发送响应。

socketChannel.write(buf);

示例代码: http ://rox-xmlrpc.sourceforge.net/niotut/

于 2013-03-06T10:35:13.680 回答