0

まず、私はソケット通信を使い始めたばかりで、まだわからないことがいくつかあります。Java での Socket 通信の基本を理解しているので、ここでガイドを探します。

さて、私の問題についてですが、リモート アプリケーションとのサーバー ソケット通信を構築する必要があります。私のアプリケーションでは、他のアプリケーションのクライアントが私と通信する serverSocket を実行します。この通信用に実装されたプロトコルの一部は、このソケットを常に開いておく必要があることです。これにより、両方のアプリケーション間で 1 つの永続的な通信チャネルが提供されます。

これまでのところ、非常に疎遠なことはありません。問題は、mi serverSocket を使用してクライアントとの会話を開始する必要があることです。これは、クライアントが要求することなく、serverSocket がクライアントに何らかの情報を送信する必要があることを意味します。

定義のために、serverSockets はクライアントがそれらとの接続を開くのを待っているスレッドであることを理解しています。この接続が確立されると、アプリケーション間の会話は通常、クライアントからの何らかの要求 (つまり、ENQ 文字) で始まり、情報交換を開始します。これは、データを検証、送受信するために実装されたプロトコルがある場合です。それ以外の場合、情報は十分な検証と制御なしにクライアントによって送信されます。

通常、mi アプリケーションが Client を使用してリモート アプリケーションの serverSocket と通信できれば、問題はより自然な方法で処理されます。しかし、そうではありません。リモート アプリケーションは serverSocket を持つことができず、Client しか持つことができません (理由は聞かないでください。これはビジネス パートナーのアプリケーションであり、私自身のアプリケーションではありません。今のところ、彼らは通信スキームを変更するつもりはありません)。

これを念頭に置いて、私の質問は次のとおりです。実行中および待機中の serverSocket を使用して、アプリケーションのプロセスが必要なときに、アプリケーションからリモート クライアントに情報を送信する方法はありますか? アプリケーションの 3 番目の Bean から serverSocket のオープン ソケットを呼び出して書き込む方法を教えてください。

4

3 に答える 3

1

あなたが探しているのはUDPソケットのようです。

DatagramSocket クラスを見てみましょう。

于 2011-11-16T21:42:24.493 に答える
0

問題は、mi serverSocket を使用してクライアントとの会話を開始する必要があることです。これは、クライアントが要求することなく、serverSocket がクライアントに何らかの情報を送信する必要があることを意味します。

それは意味がありません。の全体的な考え方はServerSocket、クライアントが接続を開始するということです。そしてServerSockets、データを送信できません。

要件を整理する必要があります。述べられているように意味がありません。

于 2011-11-16T23:11:55.913 に答える
0

ServerSocket他の何かからの TCP 接続を待ちます。接続が確立されると、 を呼び出すと、リモート システムに接続されている ServerSocket.accept()new が返されます。Socket

接続が確立されると、サーバークライアントの区別は任意になります。誰が最初に送信しなければならないかについての要件はありません。それはすべて、実装しているプロトコルに依存します。

于 2011-11-17T00:21:32.717 に答える