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 データベースの制約とデータ テーブルの設計原則

目次1. データベースの制約1.1 はじめに1.2 制約の種類1.3 ヌルでない1.4 ユニーク1....

Vueのドラッグスクリーンショット機能を実装する簡単な方法

マウスをドラッグしてページのスクリーンショットを撮ります(指定した領域にスクリーンショットをドラッグ...

スネークゲームのウェブ版を実装するためのJavaScript

この記事では、ウェブページのスネークゲームを実装するためのJavaScriptの具体的なコードを参考...

Dockerは元のタグのイメージの再タグ付けと削除を実装します

docker イメージ ID は一意であり、イメージを物理的に識別できます。repository: ...

mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...

JavaScript実行メカニズムの詳細な紹介

目次1. プロセスとスレッドの概念2. ブラウザの原則3. 同期と非同期4. 実行スタックとタスクキ...

MySQLインデックスとは何ですか?わからない場合は聞いてください

目次概要二分木からB+木へクラスター化インデックス非クラスター化インデックスジョイントインデックスと...

CSSの2つの特別な値は、カスケードの継承と初期メソッドを制御するために使用されます。

カスケードを制御するために CSS の任意のプロパティに割り当てることができる特別な値が 2 つあり...

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

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

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例サーバー開発を行う際には、...

MySQL ストアド プロシージャで月ごとにテーブルを作成する方法

詳細には立ち入らずに、コードに直接進みましょう。一緒にコミュニケーションを取り、学びましょう。月ごと...

Vueプロジェクトでlessを使用するためのヒント

目次序文1. スタイルの浸透1. パターン浸透とは何ですか? 2. 使い方は? 2. ミキシング1....

Windows で MySQL サービスを停止または削除できない問題の解決策

圧縮パッケージを解凍して Windows に MySQL をインストールしました。インストール方法は...

Docker 経由で Redis 6.x クラスターをデプロイする方法

システム環境: Redis バージョン: 6.0.8 Docker バージョン: 19.03.12シ...

Vue+nodeはオーディオ録音・再生機能を実現

結果: コードロジックを実装するのが主な部分であり、具体的なページ構造を一つ一つ紹介することはありま...