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は独自のページングコンポーネントをカプセル化します

推薦する

CSS を使用して半透明の背景と不透明なテキストを実現する例

この記事では、CSS を使用して半透明の背景と不透明なテキストの効果を実現する方法の例を紹介します。...

Dockerはブリッジを追加し、IPアドレスの範囲を設定します

バイナリ docker 19.03 バージョンがインストール後に docker0 ブリッジを自動的に...

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

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

HTML ウェブページの基本コンポーネントの概要

<br />Web ページ上の情報は主にテキストベースです。 Web ページでは、フォン...

HTML の基本的な使用法には、リンク、スタイルシート、span、div などが含まれます。

1. リンクハイパーテキスト リンクは HTML において非常に重要です。基本的な形式は次のとおりで...

MySQL EXPLAIN出力列の詳細な説明

1. はじめにEXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情...

CentOS 7 でゲートウェイを変更して IP を設定する方法の例

Centos7 バージョンをインストールするときに、外部ネットワークへの接続を選択すると、外部ネット...

JavaScript と JQuery フレームワークの基本チュートリアル

目次1. JS オブジェクトDOM –1、機能–2、テスト3. jQuery –1. 概要–2、使用...

JavaScript の組み込みオブジェクト 数学と文字列の詳細な説明

目次数学オブジェクト共通プロパティ一般的な方法Math.random()文字列メソッド長さプロパティ...

js キャンバスはランダムなパーティクル効果を実現します

この記事の例では、参考のためにjsキャンバスランダムパーティクルエフェクトの具体的なコードを共有して...

MySQL SHOW STATUSステートメントの使用

MySQL のパフォーマンス調整とサービス ステータスの監視を行うには、MySQL の現在の実行状態...

Windows で削除された MySQL 8.0.17 のルート アカウントとパスワードを回復する方法

少し前にSQLの独学を終え、MySQL 8.0.17をダウンロードしました。インストールして設定した...

Mysql と Oracle でよく使用される複数テーブルの変更ステートメントの概要

今日、SQLトレーニングの質問バンクでこの質問を見ました。これは、非常に代表的なマルチテーブル変更の...

js での typeof の使い方を理解するための記事

目次ベース戻り値の型文字列とブール値数値とbigintシンボル未定義関数物体他のよくある質問参照エラ...

jsはユーザーのページ操作を記憶するためにクッキーを使用します

序文開発プロセスでは、ブラウザレベルでユーザーが実行した操作を記憶するなど、同様の要件に遭遇すること...