Javaでのソケットプログラミング:簡単なガイド

公開: 2022-05-21

Javaでは、ソケットプログラミングは、プログラム間で通信し、コネクション型サーバーと非コネクション型サーバーの両方の異なるJREへの接続を維持する手段です。 Javaサーバーソケットは、サーバーとクライアント間の通信を開始および処理するためにのみ使用されます。

このブログでは、ソケットプログラミングについて知っておくべきすべてのことを取り上げます。

目次

Javaでのソケットプログラミング

ソケットプログラミングは、インタラクティブな方法で個別のネットワークノードを補完および使用するプロセスです。 これは、一方のソケット(ノード)がIPアドレスの特定のポートでリッスンし、もう一方のソケットが接続する双方向通信システムです。

Javaのソケット

Javaでは、ソケットは2つのネットワークプログラムを接続する双方向通信チャネルの一端です。 TCP層は、データの転送先のアプリケーションを識別するために、指定されたJavaソケットにポート番号を割り当てるために使用されます。 IPアドレスとポート番号の組み合わせを使用してエンドポイントを作成します。

Javaプラットフォームには、Javaアプリケーションと別のプログラム間の双方向ネットワーク接続の片側を実装するSocketと呼ばれるクラスが含まれています。 このクラスは、プラットフォームに依存しない実装の上にあり、Javaプログラムをシステム固有の詳細から保護します。

特定のネイティブコードの代わりにクラスを使用することにより、Javaプログラムはプラットフォームに依存しない方法でネットワークを介して通信できます。

さらに、java.netにはServerSocketクラスが含まれています。このクラスは、サーバーがクライアントからの接続をリッスンして受け入れるために使用できるソケットを実装します。 これは、ServerSocketクラスとSocketの使用方法を示す例です。

クライアント側のポートとサーバー側のポートの間に接続が作成されます。

Javaソケット接続の確立[クライアントサイド]

クライアント側のプログラミングを続行する前に、クライアントはサーバーの開始を待つ必要があります。 起動して実行すると、Javaサーバーへのクエリの送信が開始されます。 その後、クライアントはサーバーの応答を待ちます。 これは、クライアントサーバー接続ロジックの概要です。

クライアント側のプログラミングについて詳しく見ていきましょう。

別のマシンに接続するには、ソケット接続が必要です。 2台のコンピューターは、ネットワーク上のどこにあるか(IPアドレス)、およびソケット接続を確立するために使用しているTCPポートを認識している必要があります。 java.netフレームワークは、ソケットクラスを示します。

サーバーのIPアドレスが最初の入力引数です。 TCPポートはここでの次のパラメータです。 (これは、サーバーでどのプログラムを開始するかを示す番号にすぎません。)たとえば、HTTPはポート80を使用します。通常、ポート番号の範囲は0〜65535です。

コミュニケーション

ストリームは、ソケット接続を介して通信するときにデータの入出力に使用されます。 リクエストを送信して強力な接続を確立したら、ソケット接続をオフにする必要があります。

Javaサーバーソケット接続を閉じる

サーバーにメッセージを送信した後、ソケット接続は明示的に閉じられ、ソケット接続は明示的に閉じられます。

//顧客向けのデモJavaプログラム

インポートjava.net。*;

インポートjava.io.*;

パブリッククラスClient_Side_Program

{{

//ソケットストリーム、入力ストリーム、および出力ストリームを初期化するため

プライベートソケットソケット=null;

プライベートDataInputStream入力=null;

private DataOutputStream out = null;

//TCPポートとIPアドレスを配置するコンストラクター

public Client(String add、int port)

{{

//接続を確立します

試す

{{

socket = new Socket(add、port);

System.out.println( "接続済み");

//端末から入力を受け取ります

input = new DataInputStream(System.in);

//出力をソケットに送信します

out = new DataOutputStream(socket.getOutputStream());

}

catch(UnknownHostException u)

{{

System.out.println(u);

}

catch(IOException i)

{{

System.out.println(i);

}

//入力からメッセージを読み取る文字列

String line =“”;

//「Over」が入力されるまで読み続けます

while(!line.equals( "Over"))

{{

試す

{{

line = input.readLine();

out.writeUTF(line);

}

catch(IOException i)

{{

System.out.println(i);

}

}

//接続を閉じます

試す

{{

input.close();

out.close();

socket.close();

}

catch(IOException i)

{{

System.out.println(i);

}

}

public static void main(String args [])

{{

クライアントclient=new Client(“ 127.0.0.1”、5000);

}

}

このコードのソースにアクセスするには、ここをクリックしてください

Javaソケット接続の確立[サーバーサイド]

サーバーはオブジェクトを作成し、Javaサーバーのソケット側の接続を考慮しながらクライアントの要求を待ちます。 リクエストが送信されると、サーバーはクライアントと対話します。 サーバー側アプリケーションをコーディングするには、次の2つのソケットが必要です。クライアントが新しいSocket()を作成すると、クライアントの要求を待機するためにServerSocketが作成されます。 単純なソケットは、クライアントとのサーバー側の通信を開始するプログラムとして定義できます。 Javaサーバー側のソケット接続からレポートを取得すると、それに応じてクライアントと応答を伝達できます。

コミュニケーション

出力を送信するためにソケットを使用するには、通常、getOutputStream()メソッドを使用することを楽しみにしています。

Javaサーバーソケット接続を閉じる

ソケットと入出力ストリームの両方をオフにして接続を終了することが重要です。

//サーバーJavaプログラム

インポートjava.net。*;

インポートjava.io.*;

パブリッククラスサーバー

{{

//ソケットと入力ストリームを初期化します

プライベートソケットソケット=null;

プライベートServerSocketサーバー=null;

private DataInputStream in = null;

//ポート付きのコンストラクタ

パブリックサーバー(intポート)

{{

//サーバーの起動後に接続を待機します

試す

{{

server = new ServerSocket(port);

System.out.println( "サーバー:開始済み");

System.out.println( "クライアントの到着を待っています…");

ソケット=server.accept();

System.out.println( "クライアントが受け入れられました");

//クライアントソケット入力を取得するため

in = new DataInputStream(

new BufferedInputStream(socket.getInputStream()));

String line =“”;

//「Over」が送信されるまでクライアントからのメッセージを読み取るため

while(!line.equals( "Over"))

{{

試す

{{

line = in.readUTF();

System.out.println(line);

}

catch(IOException i)

{{

System.out.println(i);

}

}

System.out.println( "接続を閉じる");

//接続を閉じます

socket.close();

in.close();

}

catch(IOException i)

{{

System.out.println(i);

}

}

public static void main(String args [])

{{

サーバーサーバー=新しいサーバー(5000);

}

}

このコードの詳細を確認するには、ここをクリックしてください

クライアント側とサーバー側の両方を構成した後、最初にサーバー側ソフトウェアを実行できます。 次に、クライアント側のソフトウェアを実行してリクエストを送信する必要があります。 リクエストがクライアント側から来ると、サーバーはすぐに反応します。

人気のソフトウェアエンジニアリングコースをご覧ください

SL。 いいえ ソフトウェア開発プログラム
1 LJMU&IIITBのコンピュータサイエンスの理学修士 CaltechCTMEサイバーセキュリティ証明書プログラム
2 フルスタック開発ブートキャンプ ブロックチェーンのPGプログラム
3 ソフトウェア開発のエグゼクティブ大学院プログラム-DevOpsの専門分野 すべてのソフトウェアエンジニアリングコースを表示

ターミナルまたはコマンドプロンプトの実行

ターミナルまたはコマンドプロンプトを開始するには、次のコマンドを使用します。 まず、2つのウィンドウを作成します。1つはサーバー専用で、もう1つはクライアント専用です。

  1. サーバープログラムの実行を開始します。

$javaサーバー

  1. 次に、別の端末で、クライアントアプリケーションを次のように起動します。

Javaクライアント$

サーバーがクライアントを受け入れると、ソフトウェアは「接続済み」と「クライアントが受け入れられました」と表示します。

  1. 次に、[クライアント]ボックスで、メッセージの入力を開始できます。 クライアント入力の例を次に示します。

やあ! これは私の最初のプロのソケット接続です。

サーバーが取得して同時に表示するもの

やあ! これは私の最初のプロのソケット接続です。

以上。

接続を閉じる

前述のように、「オーバー」を送信すると、クライアントとサーバー間の接続が終了します。

ソフトウェア開発に関連する人気の記事を読む

Javaでデータ抽象化を実装する方法は? Javaの内部クラスとは何ですか? Java識別子:定義、構文、および例
例を使用してOOPSでのカプセル化を理解する Cでのコマンドライン引数の説明 2022年のクラウドコンピューティングのトップ10の機能と特徴
Javaのポリモーフィズム:概念、タイプ、特性、例 Javaのパッケージとその使用方法 初心者向けのGitチュートリアル:最初からGitを学ぶ

結論

Java Socketプログラミングは、ソケットAPIを使用して、ローカルとリモートのクライアントサーバーアプリケーション間の通信を確立するための重要なツールです。 ソケットプログラミングの適切な知識は、サーバーとクライアントの接続を改善することができます。

Javaを学び、フルスタック開発をマスターしたい場合は、インパクトのあるコースがあります。ソフトウェア開発におけるupGradのエグゼクティブPGプログラム–フルスタック開発の専門分野です。

IIIT-Bの13か月のプログラムは、学生がコンピュータサイエンスの基礎、ソフトウェア開発プロセス、バックエンドAPI、インタラクティブWebUIなどのスキルを習得できるように設計されています。 技術者以外のコーダーと新しいコーダーの両方がソフトウェアキャリア移行ブートキャンプにアクセスして、upGradからプログラミングスキルと360度のキャリアサポートを磨くことができます。

世界のトップ大学からオンラインでソフトウェア開発コース学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを迅速に追跡します。

Javaソケットプログラミングを学ぶことの利点は何ですか?

ソケットは、ネットワーキングの観点から、チャットなどのクライアントサーバーアプリケーションを構築するために使用される場合があります。 ソケットは、システムのポートが開いているかどうか、Nmapのような標準のポートスキャナープログラムがあるかどうか、およびそれらを低レベルで利用できるかどうかを検出するために、最も基本的なセキュリティレベルで実装されます。 SSHと同じ方法で使用できます。SecureSocketShellコマンドを使用して、リバースシェルを介して外部サーバーに接続できます。

accept関数は何をしますか?

accept関数は、引数が到着するまでサーバーにとどまることをブロックすることにより、クライアントがサーバーに接続するのを待ちます。 次に、getInputStream関数を使用して、ソケットから入力を取得します。 サーバーは、Overコマンドが受信されるまで送信されたメッセージを受け入れ続けるように設計されています。

ネットワークプログラミングでスレッドが使用されるのはなぜですか?

複数のクライアントが同時に参加することを望んでいます。 したがって、異なるスレッドが各クライアント要求を処理できるように、サーバー側でスレッドを使用する必要があります。 2つのリクエストがサーバーに同時に来る状況を想定しましょう。 単純なサーバークライアントアプリケーションでは複数のリクエストを同時に処理する方法が提供されていないため、ナノ秒早く到着したリクエストはサーバーに接続できますが、他のリクエストは拒否されます。