Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户端/服务器套接字:如何使服务器将消息推送到客户端?_Java_Sockets_Tcp - Fatal编程技术网

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

Java 客户端/服务器套接字:如何使服务器将消息推送到客户端?,java,sockets,tcp,Java,Sockets,Tcp,我目前正在用Java制作一个通过套接字进行通信的客户机/服务器应用程序。我在这类编程方面的经验非常有限,我只做过客户机请求/服务器响应类型的应用程序。现在,我想反过来做。也就是说,客户机连接到服务器,然后等待服务器定期向其推送消息 问题是:如何创建这样的应用程序?或者更重要的一点:如何让服务器在不首先接收请求的情况下写入客户端套接字,以及如何让客户端监听更多消息?我认为您是在混合客户端和服务器逻辑,您应该考虑服务器的行为是否更像客户端。但是好吧 首先,将一些java类作为入口点 您可以创建一

我目前正在用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);
示例代码:

谢谢!我去看看。我知道对于服务器来说,我想要的是一种不同寻常的行为。这种服务器有两种模式,一种是连续向连接的客户端发送数据,另一种是接收请求。我不会经常(或根本不会)使用请求模式。在不提供发货地址的情况下,如何接收订单?客户端首先连接到服务器。这是他们唯一要做的事情,而不是稍后从服务器接收数据。