1

私はJavaを使用して以下のようにソケットプログラミングを行っています。

クライアントプログラムは以下の通りです。

 Socket MyClient;
    try {
           MyClient = new Socket("Machine name", PortNumber);
    }
    catch (IOException e) {
        System.out.println(e);
    }

サーバープログラムは以下の通りです。

ServerSocket MyService;
    try {
       MyServerice = new ServerSocket(PortNumber);
        }
        catch (IOException e) {
           System.out.println(e);
        }

Socket clientSocket = null;
    try {
       clientSocket = MyService.accept();
        }
    catch (IOException e) {
       System.out.println(e);
    }

今私の質問は、1つのポートで複数のソケットを開くために複数のスレッドを実行する場合(上記のサーバーコードのように)、クライアントプログラムはどのソケットに接続しているかをどのように知るのですか?

4

3 に答える 3

3

クライアントはサーバーポートに接続します。したがって、すべてのクライアントが同じコードを持つことになります MyClient = new Socket("Machine name", <port where server is listening>);
。クライアント側で開かれるポートは重要ではありません。クライアントは、自分のOSで使用可能な空きポートを取得します。

于 2012-09-12T04:16:23.043 に答える
2

クライアントプログラムは、接続しているソケットをどのように認識しますか?

質問は意味がありません。「ソケットに接続する」ことはまったくなく、リスニングポートに接続し、そのうちの1つだけがあります。サーバーは1つのクライアントのみを受け入れるため、2番目以降のスレッドは、ConnectExceptionからConnectionExceptionまで、おそらく後者まで、未定義の動作を取得します。

于 2012-09-12T04:26:29.600 に答える
0

特定のポートを設定しているため、アプリケーションはそれを認識しています。TCP / IPには「自動検出」が組み込まれていません。サーバーポートを選択し、そのポートに接続するようにクライアントを設定するのはあなた次第です。これをクライアントアプリケーションにハードコーディングするか、クライアントに含める構成ファイルに含めることをお勧めします。

これが、httpがポート80であるように、多数の「既知のポート」がある理由です。これは、URLで別のポートを明示的に指定しない限り、ブラウザが常にWebサーバーのポート80に接続することを意味します。

于 2012-09-12T06:47:47.543 に答える