ServerSocketのデフォルトIPバインディングの実装プロセスの詳細な説明

ServerSocketのデフォルトIPバインディングの実装プロセスの詳細な説明

開発中にサーバーを起動する必要がある場合、ローカルテストではポートを直接書き込み、実際の環境ではバインドする IP も指定する必要があります。

サーバーに複数のネットワーク カードがある場合があり、システムは指定された IP とポートを介して通信する必要があるため、サーバーが使用する IP とポートを構成ファイルで定義する必要があります。

通常のテストでは、IP が指定されていない場合、ServerSocket はどこにバインドするのでしょうか?

この場合、サーバーはこのポートを 0.0.0.0 にバインドします。つまり、すべての IP にバインドし、各 IP でリクエストを受信できるようになります。 0.0.0.0 が何であるかについては、ここでは説明しません。

以下はテスト プログラムです。次のプログラムを通じて状況がどのようなものか確認できます。

パッケージテスト;
java.net.InetSocketAddress をインポートします。
java.net.ServerSocket をインポートします。
java.net.Socket をインポートします。
パブリッククラステスト{
	パブリック静的void main(String[] args)は例外をスローします{
		SocketClientクライアント = 新しいSocketClient();
		新しいスレッド(クライアント).start();
		
		ServerSocket serverSocket = 新しい ServerSocket();
		serverSocket.bind(新しいInetSocketAddress(8888));
// serverSocket.bind(新しいInetSocketAddress("127.0.0.1",8888));
// serverSocket.bind(新しいInetSocketAddress("192.168.1.100",8888));
		System.out.println(serverSocket.toString());
		serverSocket.accept();
	}
}
クラスSocketClientはRunnableを実装します{
	パブリックボイド実行() {
		試す {
			スレッド.sleep(2000);
			試す {
				ソケット socket = new Socket("127.0.0.1", 8888);
				System.out.println("127.0.0.1 成功" + socket.toString());
			} キャッチ (例外 e) {
				System.err.println("127.0.0.1 に失敗しました");
			}
			試す {
				ソケット socket = new Socket("192.168.1.100", 8888);
				System.out.println("192.168.1.100 成功" + socket.toString());
			} キャッチ (例外 e) {
				System.err.println("192.168.1.100 に失敗しました");
			}
		} キャッチ (例外 e) {
			e.printStackTrace();
		}
	}
}

この時点での印刷結果は次のとおりです。

サーバーソケット[アドレス=0.0.0.0/0.0.0.0、ポート=0、ローカルポート=8888]
127.0.0.1 成功ソケット[addr=/127.0.0.1,port=8888,localport=59213]
192.168.1.100 成功ソケット[addr=/192.168.1.100,port=8888,localport=59214]

127.0.0.1 を使用した場合の結果を印刷します。

サーバーソケット[アドレス=/127.0.0.1、ポート=0、ローカルポート=8888]
127.0.0.1 成功ソケット[addr=/127.0.0.1,port=8888,localport=59416]
192.168.1.100 失敗

192.168.1.100 を使用した場合の結果を印刷します。

サーバーソケット[アドレス=/192.168.1.100、ポート=0、ローカルポート=8888]
127.0.0.1 失敗
192.168.1.100 成功ソケット[addr=/192.168.1.100,port=8888,localport=59429]

デフォルトのバインディングは 0.0.0.0 であることがわかります。この時点で、このコンピューターにマークできる任意の IP を使用してポート 8888 にアクセスできます。

もちろん、これはデュアル ネットワーク カードの検証ではありません。まだ 1 つのネットワーク カードでプレイしているからです。条件が許せば、ブレードマシンで小さなテストを行うことができます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Java ネットワーク通信における ServerSocket の設計最適化スキーム
  • SocketクラスとServerSocketクラスに基づく例の説明
  • JAVA-NIO ソケット/サーバーソケット チャネル (詳細説明)
  • [Java] SocketとServerSocketの詳しい解説 勉強ノート
  • Socket および ServerSocket クラスの構築方法と API

<<:  MySQL CHARとVARCHARの保存と読み取りの違い

>>:  Vue3は独自のページングコンポーネントをカプセル化します

推薦する

MySQLデータベースの名前を高速かつ安全に変更する方法(3種類)

目次MySQLデータベースの名前を変更する方法最初の方法: データベースの名前を変更することは非推奨...

JavaScript Reduceの詳しい説明

目次地図フィルターいくつかの毎インデックスを検索パイプ参考回答1. パラメータを受け入れる関数を返す...

特定の部門 ID に基づいて、すべての下位レベルの複数レベルのサブ部門を照会する MySQL の例

シミュレーションテーブルとデータスクリプト次の SQL ステートメントをコピーして、sys_dept...

CentOS 8が利用可能になりました

CentOS 8 が利用可能になりました! CentOS 8 と RedHat Enterprise...

MySQL Null は 5 つの問題を引き起こす可能性があります (すべて致命的)

目次1. カウントデータが失われる解決2. 明確なデータ損失3.データ損失を選択解決4. Nullポ...

...

MySQLユーザー管理操作例の分析

この記事では、MySQL ユーザー管理操作について説明します。ご参考までに、詳細は以下の通りです。こ...

Linux で Scala 環境を構築し、簡単な Scala プログラムを書く

Linux に Scala 環境をインストールするのは非常に簡単です。Ubuntu 環境であれば、さ...

MySQLのスロークエリの詳細な説明

MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します...

Linux での umask の使用に関する詳細な説明

私は最近 Linux を学び始めました。Ma Ge の umask に関する Linux コースを読...

ウェブデザインで注意すべき検索最適化の知識

1. 新サイトホームページのリンクレイアウト1. リンク配置の位置:リンク配置の位置によって、リンク...

MySQL解凍版のインストール手順の詳しい説明

1. 公式サイトにアクセスします: D:\mysql-5.7.21-winx64\bin をダウンロ...

ウェブページの再設計の7つの主要要素 ウェブページの再設計の7つの主要要素を共有する

Shopify Plus は、私たちが設立した e コマース プラットフォームのエンタープライズ バ...

CentOS 7 に PHP5 用の suPHP をインストールする方法 (Peng Ge)

デフォルトでは、CentOS 7 上の PHP は apache または nobody として実行さ...