0

ネットワーク OOP に関して説明をお願いします。たとえば、メッセンジャーのようにクライアント サーバー モデルを使用すると、2 つのプログラムがあります。クライアント プログラムが実行されると、そのオブジェクトがインスタンス化されます。その後、 はクライアント プログラム内でインスタンス化され、のメソッドを使用しSocketてサーバー プログラムに接続されます。サーバープログラム内で新しいを作成するドキュメントによると。私の経験では、Java で create という言葉が使用されているときはいつでもオブジェクトを参照しているので、1 つのクライアントに対して 2 つのオブジェクトが存在するのでしょうか? 1 つはクライアント プログラムに、もう 1 つはサーバーに? サーバー プログラムまたはその逆からクライアント プログラムでオブジェクトをインスタンス化することは可能ですか?ServerSocketServerSocketaccept()SocketSocket

そして最後に、staticモディファイヤを使用Socketしてクライアント プログラムで my を作成すると、通常はそのオブジェクトを 1 つだけ作成できるためSocketSocketクライアント プログラムの が通常はSocketサーバー プログラムのオブジェクトと同じではない場合、オブジェクトを参照します。 2 つのプログラム間で共有されるオブジェクトは 1 つだけですか?

明確にするために、複数のクライアント接続について話しているのではありませんSocket。サーバーへのクライアント接続の基本的な仕組みを理解しようとしているだけServerSocketでなく、その接続を介して何ができるか、何ができないかを理解しようとしていますが、理解したら自分の時間に実験できます。

私はこれを考えすぎていないことを願っています。よろしくお願いします:-)。

4

2 に答える 2

1

まず第一に、あなたの質問はJavaEEとは何の関係もありません。ソケットはJavaSEの一部です。

また、あなたは何staticを意味するのか理解していません。static変数をクラスのインスタンスにスコープするのではなく、クラスにスコープします。作成されるオブジェクトの数を制限するものではありません。また、各JVMには独自のオブジェクトとクラスがあり、ネットワークを介して他のJVMと共有されることはありません。クライアントJVMのクラスAの静的変数にオブジェクトを格納しても、サーバーにfoo格納される内容には影響しません。A.foo

作成されたソケットオブジェクトの数についてあなたがそれほど心配している理由がわかりません。ソケットはまさにそれです:2者間の通信のためのエンドポイント。各パーティには、他のパーティのエンドポイントに接続された独自のエンドポイントがあります。友人に電話をかけるときと少し似ています。電話を使用し、友人も1つを使用し、2つの電話は相互に接続されています。

于 2012-12-23T10:15:57.100 に答える
1

まず、はい、同じ接続に対して2つのオブジェクトが作成されることは絶対に正しいですSocket。1つはクライアントプログラムにあり、もう1つはサーバーにあります。ただし、これらを「同じ」オブジェクトであると考えるのは間違いです。通常の言語では、「ソケット」は接続が何かに接続される場所です。2つのものの間の接続には、両端に1つずつ、合計2つのソケットがあります。ネットワークSocketはまったく同じです。クライアントプログラムに1つ、サーバープログラムに1つあります。

ServerSocketサーバープログラムにもがありますが、それはまったく異なります。それは実際にはソケットではなく、ソケットを作成するためのデバイスです。元のBerkeleyソケットAPIでは、これは一種のソケットとしてモデル化されていたため(誤ってそうですか?)、Javaではそれに応じて名前が付けられています。

サーバープログラムがクライアントプログラムでオブジェクトを作成できるかどうかを尋ねます。ソケットを使用するビジネスは、クライアントがサーバープログラムでオブジェクトを作成する例であることを意味します。どちらも当てはまりません。サーバープログラムのSocketは、サーバーコードによって完全に作成されます。

現在、シリアル化と呼ばれるものがあります。これを使用すると、1つのプログラムでオブジェクトを取得し、それらをバイトとしてエンコードしてソケットを使用してネットワーク経由で送信し、もう一方の端でそれらのバイトから新しいオブジェクトを再構成できます。これにより、1つのプログラムが別のプログラムをリモートで操作したり、2つのプログラムに同時に存在するオブジェクトを作成したりすることはできませんが、2つの協調するプログラムがオブジェクトを一方から他方にコピーできます。

staticはい、JBが言うように、あなたはこれを誤解しています。変数を宣言する場合static、それは宣言されたクラスのインスタンスではなく、宣言されたクラスに属していることを意味します。したがって、クラスのインスタンスごとに1つではなく、そのプログラムに変数のコピーが1つだけ存在します。ただし、プログラム間での影響はありません。異なるプログラムには完全に別個の変数のユニバースがあるため、それぞれに独自のstatic変数のコピーがあります。

于 2012-12-23T11:59:51.617 に答える