1

さて、私は Oracal サイトとこのサイトに関するいくつかの質問を読みました。私はまだソケットに関するいくつかのことを理解するのに少し苦労しているので、ここにいる誰かが私の遅い脳にそれを説明するために時間を費やしてくれるかどうかを確認します. 私がやっていることは、チャット クライアントとチャット サーバーをセットアップすることです (一挙にスイングとソケットを学ぶため)。私が見たすべての例にもかかわらず、私はまだそれらがどのように機能するかを静かに理解していません. 入力ストリームを備えた 1 つのソケットと出力ストリームを備えた 1 つのソケットがどのように機能するかは知っていますが、それ以上は、私が見つけたほとんどのリソースが説明しているため、理解に苦労しています。これは、これに関する私の一連の質問です。

  1. クライアントへの入力と出力を同時に処理できるようにしたい場合、どうすればよいですか? アウトを待ってから、サーバーに変更があった場合は、入力ストリームに切り替えて変更を取得してから、出力ストリームに切り替えますか? または、入力ストリームと出力ストリームの両方を同時に実行できますか?
  2. サーバーが一度に複数のクライアントを処理する必要があるとしましょう。クライアントごとにソケットを作成する必要がありますよね?これを処理する良い方法は何ですか?
  3. クライアントが現在のソケットの IP アドレスまたはポートを変更して、別のサーバーに接続したいとします。新しいソケットを作成するだけですか、それとも現在のソケットを変更する方法はありますか?

それが私が持っている主な質問です。そこまで理解できれば、あとは自分で考えられると思います。

.

4

3 に答える 3

6

これは、ソケットの優れたガイドです。それ自体は「Java ソケット」ではありませんが、非常に役立つと思います。

Beej のネットワーク プログラミング ガイド

質問に答えるには:

Q: クライアントへの入力と出力を同時に処理できるようにするにはどうすればよいですか?

A: 特別なことをする必要はありません。ソケットは自動的に「バイモーダル」です。いつでも読み取り (データがある場合) または書き込みが可能です。

Q: サーバーが一度に複数のクライアントを処理する必要があるとしましょう。クライアントごとにソケットを作成する必要がありますよね?

A: 実際には、システムは新しいクライアント接続ごとにソケットを提供します。あなたはそれを「作成」しません - それはあなたに与えられます。

新しい接続はそれぞれ新しいソケットです。

多くの場合、サーバーは新しいスレッドを生成して、新しいクライアント接続ごとにサービスを提供します。

Q: クライアントが現在のソケットの IP アドレスまたはポートを変更して、別のサーバーに接続したいとします。新しいソケットを作成するだけですか、それとも現在のソケットを変更する方法はありますか?

A: クライアントは既存の接続を終了し、新しい接続を開きます。

于 2012-05-13T01:33:19.703 に答える
1

1.- クライアントへの入力と出力を同時に処理できるようにしたい場合、どうすればよいですか? アウトを待ってから、サーバーに変更があった場合は、入力ストリームに切り替えて変更を取得してから、出力ストリームに切り替えますか? または、入力ストリームと出力ストリームの両方を同時に実行できますか?

クライアントが接続を開始した場合、サーバーは入力を待ってから出力ストリームに移動し、何かを送信します。すべての接続は、tcp 接続であるか、ファイルを操作する場合でも、入力ストリームと出力ストリームを持ちます。

2.- サーバーが一度に複数のクライアントを処理する必要があるとしましょう。クライアントごとにソケットを作成する必要がありますよね?これを処理する良い方法は何ですか?

これにはマルチスレッドを含むさまざまな戦略があるため、今はストリームに焦点を当てています。または、1 つのサーバーと 1 つのクライアントでそれを維持します。

3.- クライアントが現在のソケットの IP アドレスまたはポートを変更し、別のサーバーに接続したいとします。新しいソケットを作成するだけですか、それとも現在のソケットを変更する方法はありますか?

はい、ソケットの定義は、新しいソケットが必要な場合に、特定のポートを介して IP アドレスによって行われる接続です。

于 2012-05-13T01:33:43.227 に答える
1

ここで最善を尽くすつもりですが、ここがそのような質問をする場所ではないと思います。

まず第一に、ソケットは基盤となるオペレーティング システムのソケット (UNIX ソケット、WIN ソックスなど) を抽象化したものであることを理解する必要があります。

これらの種類のソケットは、トランスポート層の接続指向サービスをモデル化するためのものです (OSI モデルを見てください)。これは、ソケットがクライアントからのバイト ストリームとクライアントへのバイト ストリームを提供することを意味します。したがって、最初の質問に答えるために、これらのストリームは独立しています。もちろん、これらのストリームで話すプロトコルの設計はあなたの責任です。

2 番目の質問に答えるには、TCP 接続がどのように機能するかを知る必要があります。基本的に、サーバーは 1 つのポート (ポートは TCP アドレス指定メカニズム) で 1 つ以上のネットワーク インターフェイスをリッスンしており、着信同時接続の構成可能なバックログを処理できます。答えは、着信接続に対して、サーバー上の新しいスレッドが作成されるか、スレッドプールから取得されるのが一般的です。

3 番目の質問に答えると、ホスト間で接続が確立されるため、いずれかを変更する必要がある場合は、新しい接続を作成する必要があります。

お役に立てれば。

乾杯

于 2012-05-13T01:35:13.990 に答える