ホームページ Java &#&チュートリアル ネットワークプログラミングソケットの詳しい説明

ネットワークプログラミングソケットの詳しい説明

May 08, 2017 pm 02:04 PM
java socket ネットワークプログラミング

この記事では、主に Java ネットワーク プログラミングのクラス メソッドと例を紹介します。必要な友人は参照してください。

ネットワーク プログラミングとは、複数のデバイス (コンピューター) で実行されるプログラムを作成することを指し、これらのデバイスはすべてネットワークを介して接続されます。

java.net パッケージの J2SE API には、低レベルの通信の詳細を提供するクラスとインターフェイスが含まれています。これらのクラスとインターフェイスを直接使用して、通信の詳細ではなく問題の解決に集中できます。

java.net パッケージは、2 つの一般的なネットワーク プロトコルのサポートを提供します:

TCP: TCP は、Transmission Control Protocol の略称で、2 つのアプリケーション間の信頼性の高い通信を保証します。 TCP/IP として知られるインターネット プロトコルに一般的に使用されます。

UDP:UDPはUser Datagram Protocolの略で、コネクションレス型プロトコルです。アプリケーション間で送信されるデータのパケットを提供します。
このチュートリアルでは主に次の 2 つのトピックについて説明します。

ソケット プログラミング: これは最も広く使用されているネットワーキング概念であり、詳細に説明されています

URL 処理:この部分は別のスペースで説明されます。Java でさらに詳しく知るにはここをクリックしてください言語での URL 処理。

ソケット プログラミング

ソケットは、TCP を使用した 2 台のコンピューター間の通信メカニズムを提供します。 クライアント プログラムはソケットを作成し、サーバーのソケットへの接続を試みます。

接続が確立されると、サーバーは Socket オブジェクト を作成します。これで、クライアントとサーバーは、Socket オブジェクトへの書き込みと読み取りによって通信できるようになります。

java.net.Socket クラスはソケットを表し、java.net.ServerSocket クラスはサーバー プログラムがクライアントをリッスンしてクライアントとの接続を確立するメカニズムを提供します。

2 台のコンピューター間でソケットを使用して TCP 接続を確立する場合、次の手順が実行されます:

サーバーは、サーバー上のポートを介した通信を表す ServerSocket オブジェクトをインスタンス化します。

サーバーは ServerSocket クラスの accept() メソッドを呼び出します。このメソッドは、クライアントがサーバー上の指定されたポートに接続するまで待機します。

サーバーが待機している間、クライアントは Socket オブジェクトをインスタンス化し、サーバー名とポート番号を指定して接続を要求します。

Socket クラスの コンストラクター は、クライアントを指定されたサーバーとポート番号に接続しようとします。通信が確立されると、サーバーと通信するための Socket オブジェクトがクライアント上に作成されます。

サーバー側では、accept() メソッドは、クライアントのソケットに接続されているサーバー上の新しいソケット reference を返します。

接続確立後は、I/Oストリームを使用して通信が行われます。各ソケットには出力ストリームと入力ストリームがあります。クライアントの出力ストリームはサーバーの入力ストリームに接続され、クライアントの入力ストリームはサーバーの出力ストリームに接続されます。

TCP は双方向通信プロトコルであるため、データは 2 つのデータ ストリームを通じて同時に送信できます。以下は、ソケットを実装するためにいくつかのクラスによって提供される便利なメソッドの完全なセットです。

ServerSocket クラスのメソッド

サーバー アプリケーションは、java.net.ServerSocket クラスを使用してポートを取得し、クライアント要求をリッスンします。

ServerSocket クラスには 4 つの構築メソッドがあります:

シリアル番号 メソッドの説明
1

public ServerSocket(int port) throws IOException

Create特定のポート上のサーバーソケットにバインドします

2

public ServerSocket(int port, int backlog) throws IOException

指定されたバックログを使用してサーバーソケットを作成し、指定されたローカルポート番号にバインドします

3

public ServerSocket(int port, int backlog, InetAddress address) throws IOException

指定されたポート、リッスンバックログ、バインド先のローカル IP アドレスを持つサーバーを作成します

4

public ServerSocket() throws IOException

非バインドサーバーソケットを作成する

バインドされていないサーバーソケットを作成します。 ServerSocket 構築メソッドが 例外をスローしない 場合は、アプリケーションが指定されたポートに正常にバインドされ、クライアントのリクエストをリッスンしていることを意味します。

ServerSocket クラスの一般的なメソッドをいくつか示します。

number メソッドの説明
1

public int Port()

はこのソケットを返しますリッスンするポート

2

public Socket accept() throws IOException

このソケットへの接続をリッスンして受け入れる

3

public void setSoTimeout(int timeout )

有効にする/タイムアウト値をミリ秒単位で指定して SO_TIMEOUT を無効にします

4

public void binding(SocketAddress host, int backlog)

ServerSocket を特定のアドレス (IP アドレスとポート番号) にバインドします

Socket クラスのメソッド

java.net.Socket クラスは、クライアントとサーバーの両方が相互に通信するために使用するソケットを表します。クライアントはインスタンス化を通じて Socket オブジェクトを取得し、サーバーは accept() メソッドの戻り値を通じて Socket オブジェクトを取得します。 Socket クラスには 5 つの構築メソッドがあります。port) は UnknownHostException、IOException をスローします。

ストリーム ソケットを作成し、指定されたホストの指定されたポート番号に接続します。 ) IOExceptionをスローします

ストリームソケットを作成して接続します指定されたIPアドレスの指定されたポート番号に接続します

3ソケットを作成し、リモートホスト上の指定されたリモートポートに接続します4public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException5public Socket()

Socket コンストラクターが返されると、単に Socket オブジェクトをインスタンス化するのではなく、実際に指定されたサーバーとポートへの接続を試みます。

いくつかの興味深いメソッドを以下にリストします。クライアントとサーバーの両方が Socket オブジェクトを持っているため、クライアントとサーバーの両方がこれらのメソッドを呼び出すことができることに注意してください。

public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException.

Createsソケットを作成し、指定されたリモートアドレスに接続します リモートポートを指定します

システムのデフォルトタイプ SocketImpl を通じて未接続のソケットを作成します

2345678
シリアル番号 メソッドの説明
1

public void connect(SocketAddress host, int timeout) throws IOException

このソケットをサーバーに接続し、タイムアウト値

public InetAddress getInetAddress()

ソケット接続のアドレスを返します

public int getPort()

このソケットが接続されているリモートポートを返します

public int getLocalPort()

このソケットがバインドされているローカルポートを返します

public SocketAddress getRemoteSocketAddress()

接続されているこのソケットを返します エンドポイントのアドレス、または接続されていない場合は null


public InputStream getInputStream() throws IOException

このソケットの入力ストリームを返します

public OutputStream getOutputStream () throws IOException

を返しますこのソケットの出力ストリーム

public void close() throws IOException

このソケットを閉じる

InetAddressクラスのメソッド

このクラスはインターネットプロトコルを表します(IP)アドレス。以下は、ソケット プログラミングでより便利なメソッドのリストです。り)


元の IP アドレスが指定されている場合は、InetAddress オブジェクトを返します

static InetAddress getByAddress(String host, byte[] addr)45 7

ソケットクライアントインスタンス

以下のGreetingClientは、ソケット経由でサーバーに接続してリクエストを送信し、レスポンスを待つクライアントプログラムです。

// 文件名 GreetingClient.java
import java.net.*;
import java.io.*;
public class GreetingClient
{
 public static void main(String [] args)
 {
  String serverName = args[0];
  int port = Integer.parseInt(args[1]);
  try
  {
   System.out.println("Connecting to " + serverName
        + " on port " + port);
   Socket client = new Socket(serverName, port);
   System.out.println("Just connected to "
      + client.getRemoteSocketAddress());
   OutputStream outToServer = client.getOutputStream();
   DataOutputStream out =
      new DataOutputStream(outToServer);
 
   out.writeUTF("Hello from "
      + client.getLocalSocketAddress());
   InputStream inFromServer = client.getInputStream();
   DataInputStream in =
      new DataInputStream(inFromServer);
   System.out.println("Server says " + in.readUTF());
   client.close();
  }catch(IOException e)
  {
   e.printStackTrace();
  }
 }
}
ログイン後にコピー

ソケット サーバーの例

次の GreetingServer プログラムは、ソケットを使用して指定されたポートをリッスンするサーバー側アプリケーションです。

// 文件名 GreetingServer.java
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread
{
 private ServerSocket serverSocket;
 
 public GreetingServer(int port) throws IOException
 {
  serverSocket = new ServerSocket(port);
  serverSocket.setSoTimeout(10000);
 }
 public void run()
 {
  while(true)
  {
   try
   {
   System.out.println("Waiting for client on port " +
   serverSocket.getLocalPort() + "...");
   Socket server = serverSocket.accept();
   System.out.println("Just connected to "
     + server.getRemoteSocketAddress());
   DataInputStream in =
     new DataInputStream(server.getInputStream());
   System.out.println(in.readUTF());
   DataOutputStream out =
     new DataOutputStream(server.getOutputStream());
   out.writeUTF("Thank you for connecting to "
    + server.getLocalSocketAddress() + "\nGoodbye!");
   server.close();
   }catch(SocketTimeoutException s)
   {
   System.out.println("Socket timed out!");
   break;
   }catch(IOException e)
   {
   e.printStackTrace();
   break;
   }
  }
 }
 public static void main(String [] args)
 {
  int port = Integer.parseInt(args[0]);
  try
  {
   Thread t = new GreetingServer(port);
   t.start();
  }catch(IOException e)
  {
   e.printStackTrace();
  }
 }
}
ログイン後にコピー

上記の Java コードをコンパイルし、次のコマンドを実行して、ポート番号 6066 を使用してサービスを開始します:

$ java GreetingServer 6066
Waiting for client on port 6066...
ログイン後にコピー

次のようにクライアントを開きます:

$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!
ログイン後にコピー

【関連する推奨事項】

1. Java 無料ビデオチュートリアル

2.Java で均等な比率の画像サムネイルを実装するためのビデオチュートリアル

3.Alibaba Java 開発マニュアル

2 提供されたホスト名と IP アドレスに基づいて InetAddress を作成します
3

static InetAddress getByName(String host)

ホスト名を指定してホストの IP アドレスを決定します

String getHostAddress()

IP アドレス

文字列

(テキスト表現として)


String getHostName()

この IP アドレスのホスト名を取得します

6

static InetAddress getLocalHost()

ローカルホストを返します

String toString()

このIPアドレスをStringに変換します

以上がネットワークプログラミングソケットの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

See all articles