客户端/服务器套接字:如何将服务器推送消息发送到客户端?

时间:2013-03-06 09:58:03

标签: java sockets tcp

我目前正在使用Java创建一个通过套接字进行通信的客户端/服务器应用程序。我对这种类型的编程的经验非常有限,我只是从服务器类型的应用程序的客户端/响应中做过请求。现在,我想以相反的方式做到这一点。也就是说,客户端连接到服务器,然后等待服务器定期向其推送消息。

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

1 个答案:

答案 0 :(得分:1)

我认为您正在混合客户端和服务器逻辑,您应该考虑您的服务器是否更像客户端。但好吧......

首先将一些java类作为入口点

AbstractSelector

SocketChannel

您可以创建一个新的选择器,如

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

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