UDP シンプル サーバー クライアント コード例

UDP シンプル サーバー クライアント コード例

UDP の理論については詳しく説明しません。UDP に関する HelloWorld プログラムを紹介します。コードはわかりやすいので、初心者の皆さんのお役に立てれば幸いです。

もちろん、実際のところ、私はこの分野でまだ始めたばかりです!

まず、サーバー コードを記述します。サーバーは、アクセスをリッスンするためにローカル IP とポートをバインドします。

パッケージ udp;

java.io.IOException をインポートします。
java.net.DatagramPacket をインポートします。
java.net.DatagramSocket をインポートします。
java.net.InetSocketAddress をインポートします。

/**
 * UDP サービスクラス */
パブリッククラス UdpServerSocket {
	
	プライベートbyte[]バッファ = 新しいbyte[1024];
	プライベート静的 DatagramSocket ds = null;
	プライベート DatagramPacket パケット = null;
	プライベート InetSocketAddress socketAddress = null;
	
	/**
	 * テスト方法 */
	パブリック静的void main(String[] args)は例外をスローします{
		文字列 serverHost = "127.0.0.1";
		int サーバーポート = 3344;
		UdpServerSocket udpServerSocket = 新しい UdpServerSocket(serverHost,
				サーバーポート);
		(真)の間{
			udpServerSocket.receive();
			udpServerSocket.response("こんにちは、食事はしましたか?");
		}		
	}

	/**
	 * コンストラクター、ホストとポートをバインド */
	パブリック UdpServerSocket(String ホスト、int ポート) 例外をスローします {
		socketAddress = 新しいInetSocketAddress(ホスト、ポート);
		ds = 新しい DatagramSocket(ソケットアドレス);
		System.out.println("サーバーが起動しました!");
	}

	/**
	 * データパケットを受信します。このメソッドはスレッドをブロックします */
	パブリックファイナル文字列受信()はIOExceptionをスローします{
		パケット = 新しい DatagramPacket(バッファ、バッファ長);
		ds.receive(パケット);
		文字列情報 = 新しい文字列(packet.getData(), 0, packet.getLength());
		System.out.println("情報を受信: " + info);
		情報を返します。
	}

	/**
	 * 応答パケットを要求元に送信する */
	パブリック最終voidレスポンス(String info)はIOExceptionをスローします{
		System.out.println("クライアントアドレス: " + packet.getAddress().getHostAddress()
				+ ",ポート:" + packet.getPort());
		DatagramPacket dp = 新しいDatagramPacket(バッファ、バッファ長、パケット
				.getAddress()、パケット.getPort());
		dp.setData(info.getBytes());
		ds.send(dp);
	}
}

実行後、サーバーが正常に実行され、プログラムがポートのリッスンを開始し、受信方法がブロックされ、アクセスがある場合にのみ続行されるというメッセージが表示されます。

アクセスするためのクライアントを作成すると、インターネット上の例はすべて DatagramSocket オブジェクトを直接作成しますが、実際にはどのポートを使用しているかはわかりません。ここでは、作成時にバインドするポートを指定します。実際、非常に簡単です。オブジェクトを初期化するときにポート パラメーターを渡すだけです。

ここでクライアントにアクセスすると、クライアントは IP とポートを印刷します。

クライアントコードを見てみましょう:

パッケージ udp;

java.io.* をインポートします。
java.net.* をインポートします。

/**
 * UDP クライアント プログラム。サーバーにデータを送信し、サーバーの応答情報を受信するために使用されます。*/
パブリッククラス UdpClientSocket {
	プライベートbyte[]バッファ = 新しいbyte[1024];

	プライベート静的 DatagramSocket ds = null;
	
	/**
	 * クライアントのパケット送信方法と応答情報の受信方法をテストします */
	パブリック静的void main(String[] args)は例外をスローします{
		UdpClientSocket クライアント = 新しい UdpClientSocket();
		文字列 serverHost = "127.0.0.1";
		int サーバーポート = 3344;
		client.send(serverHost, serverPort, ("こんにちは!").getBytes());
		バイト[] bt = client.receive();
		System.out.println("サーバー応答データ: " + new String(bt));
		// 接続を閉じる try {
			ds.close();
		} catch (例外例) {
			例:printStackTrace();
		}
	}

	/**
	 * コンストラクター、UDPクライアントの作成 */
	パブリック UdpClientSocket() は例外をスローします {
		ds = new DatagramSocket(8899); // クライアントとしてローカルポートにバインドする }
	
	/**
	 * 指定されたサーバーにデータ情報を送信します */
	パブリックファイナルボイド送信(ファイナルストリングホスト、ファイナルイントポート、
			最終byte[]バイト)はIOExceptionをスローします{
		DatagramPacket dp = 新しい DatagramPacket(bytes, bytes.length, InetAddress.getByName(host), port);
		ds.send(dp);
	}

	/**
	 * 指定されたサーバーから送り返されたデータを受信します */
	パブリックファイナルバイト[]受信()
			例外をスローします {
		DatagramPacket dp = 新しい DatagramPacket(バッファ、バッファ長);
		ds.receive(dp);		
		byte[]データ = new byte[dp.getLength()];
		System.arraycopy(dp.getData(), 0, データ, 0, dp.getLength());		
		データを返します。
	}
}

プログラムを直接実行して効果を確認してください。

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

以下もご興味があるかもしれません:
  • Python UDPプログラミングの詳細な説明
  • TCP/UDP プロトコルを使用した C# サンプル コード
  • UDP チャット プログラムに基づく Java ネットワークの例の分析
  • Java シミュレーション UDP 通信サンプル コード
  • PythonはUDPプログラム通信プロセス図を実装します
  • PythonはUDPプロトコルによるファイル転送を実装する
  • Java UDP 通信クライアントとサーバーの例の分析
  • UDP 接続オブジェクトの原理分析と使用例

<<:  生年月日を年齢に変換し、グループ化して人数を数えるMySQLの例

>>:  MySQL 並列レプリケーションの簡単な分析

推薦する

MySQL インデックスの最適化: ページング探索の詳細な紹介

目次MySQL インデックス最適化ページングの調査ケース1ケース2 MySQL インデックス最適化ペ...

Linux で Docker を使用して MySQL をインストールする手順

テスターとして、学習プロセス中に Linux でソフトウェアをインストールする必要が頻繁にある場合が...

React の 3 つの主要属性における Ref の使用に関する詳細な説明

目次クラスコンポーネント機能コンポーネントインタビューのよくある質問: React における ref...

JavaScript setinterval 1秒遅延ソリューション

setinterval を使用すると、ページを開いた直後に 1 秒の遅延後に実行されることがわかりま...

jsはシングルクリックでテーブルを変更することを実装します

Pure jsは、参照用にワンクリックで編集可能なテーブル(トランスクリプトに似たもの)を実装してい...

MySQL フェイルオーバー ノート: アプリケーション対応設計の詳細な説明

1. はじめに周知のように、データベース ミドルウェアの読み取り/書き込み分離のアプリケーション シ...

デザイン理論:フォントデザインの基礎

<br />言葉は、人間の思考や感情を伝えるために必然的に生み出されるものです。人類の文...

C++ を使用して MySQL に接続する方法

C++でMySQLに接続する際の参考情報です。具体的な内容は以下のとおりです。 MySQLCon ク...

Windows 10 での MySQL 8.0.22 のインストールと設定方法のグラフィック チュートリアル

MySQL 8.0.22のインストールと設定方法のグラフィックチュートリアル、参考までに、具体的な内...

CentOS 7.0 (mysql-5.7.21) で複数の MySQL インスタンスを起動する方法

設定手順Linux システム: CentOS-7.0 MySQL バージョン: 5.7.21 Lin...

ラベルタグの使用時に発生する問題の分析と解決策

最近何かをするときにラベル タグを使用しました。以前はラベル タグをほとんど使用していなかったため、...

英語の単語の出現頻度を数えるtrコマンドの魔法

置換を削除したり文字列を削除したりできる tr コマンドは、誰もがよく知っています。 英語では、英語...

Mysql 5.7.19 無料インストール バージョンで遭遇した落とし穴 (コレクション)

1. 公式ウェブサイトから 64 ビットの zip ファイルをダウンロードします。 2. インスト...

MySQL の 10 進数データ型の小数点埋め込み問題の詳細な説明

序文開発プロセスでは、10 進データ型がよく使用されます。 MySQL では、小数点は正確なデータ型...

Webフロントエンドツール、Sublime Text 2の紹介

Sublime Text 2 は、軽量でシンプル、効率的なクロスプラットフォーム エディターです。ブ...