0

私は現在、ソケットを介して通信するJavaでクライアント/サーバーアプリケーションを作成しています。このタイプのプログラミングの経験はかなり限られており、クライアントからの要求/サーバータイプのアプリケーションからの応答のみを行ったことがあります。今、私はそれを逆にしたいと思います。つまり、クライアントはサーバーに接続し、サーバーが定期的にメッセージをサーバーにプッシュするのを待つだけです。

問題は、そのようなアプリケーションを作成するにはどうすればよいですか?またはそれ以上のポイント:最初に要求を受信せずにサーバーにクライアントソケットに書き込むようにするにはどうすればよいですか?また、クライアントにさらにメッセージをリッスンさせ続けるにはどうすればよいですか?

4

1 に答える 1

1

クライアントとサーバーのロジックが混在していると思います。サーバーがクライアントのように動作するかどうかを検討する必要があります。でも大丈夫...

まず、エントリ ポイントとしてのいくつかの Java クラス

抽象セレクター

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/

于 2013-03-06T10:35:13.680 に答える