ソケットは、特定のプログラミング モデルに基づくプロセス間通信リンクのエンドポイントを指します。この特定のプログラミング モデルの人気のため、ソケットという名前は Java テクノロジを含む他の分野で再利用されています。
接続を確立する場合、1 台のマシンが接続を待機するプロセスを実行し、別のマシンが最初のマシンへの接続を試行する必要があります。この電話システムも同様です。一方の当事者が通話を開始し、もう一方の当事者が電話を待つ必要があります。
以下では、「echo」機能を備えたサーバーとクライアントを使用して、ネットワーク アプリケーションを作成するための java.net パッケージのアプリケーションを紹介します。
この例の主な機能は、サーバー側のプログラムがクライアントの入力を待機し、読み取った情報をクライアントにエコーし、同時にサーバー側のコンソールに出力することです。クライアントはコンソールから情報を受信した後、クライアントに入力を送信し、サーバーからエコー データを受信して、それをコンソールに表示します。
package com.javaapp.ch11;
import java.io.*;
import java.net.*;
/**
* 説明: 「エコー」機能を備えたサーバー側およびクライアント側のプログラム
*/
public class EchoClientDemo {
// サーバー側のサービス ポート。
public static Final int SERVERPORT = 990;
public static void main(String[] args) {
try {
// 接続ソケットを確立します。
Socket s = new Socket("localhost",SERVERPORT);
System.out.println("socket = " s);
// 新しいネットワーク接続の入力ストリームを作成します。
BufferedReader in = 新しいbufferedReader
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())), true); リーダー。
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("文字列を入力してください。終了するには BYE と入力してください! ");
while (true) {
// コンソールから入力された文字列を読み取り、ネットワーク接続に出力します。つまり、データをサーバーに送信します。
out.println(stdin.readLine());
String str = in.readLine();
String str = in.readLine();
。まず、java.net パッケージの Socket クラスを使用して接続ソケットを確立し、次に Socket オブジェクトの getInputStream メソッドを使用してサーバーからデータを受信し、Socket オブジェクトの getOuputStream メソッドを使用してサーバーにデータを送信します。入力ストリームと出力ストリームを作成した後は、ファイルと同じ方法でデータの読み取りと書き込みを行うことができます。
複数のクライアントをサポートする「echo」サーバー側プログラム コードは次のとおりです:
コードをコピーします
コードは次のとおりです。以下のように:
package com.javaapp.ch11;
import java.io.*;
import java.net.*;
/**
* 説明: マルチクライアント「エコー」サーバー側プログラムをサポート
*/
public class EchoServerThreadDemo {
// サーバー側のサービス ポート。
public static Final int SERVERPORT = 990;
public static void main(String[] args) {
try {
// 接続されたクライアントのシリアル番号。
int number = 1;
int number = 1;
ServerSocket s = new ServerSocket(SERVERPORT);
System.out.println("Started: " s);
while (true) {
、接続ソケット文字を確立します。
ソケット受信 = s.accept();
System.out.println("接続 " 番号 " が受け入れられました: ");
System.out.println(incoming);
スレッドは次の目的で使用されます。サーバーとクライアント間のデータ送信。
// メインプログラムは、リクエストが来ているかどうかを監視し続けます。
System.err.println ("IOException");
}
}
}
class EchoThread extends Thread {
private Socket s ;
int n;
public EchoThread(Socket incoming,int number ) {
s = incoming;
n = number;
}
} public void run() {
{
を試してください
BufferedReader in = 新しいbufferedReader
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())),true);
System.out.println("Hello! 終了するには BYE と入力してください。" );
// クライアントの入力をエコーします。
While (TRUE) {
// ネットワークから 1 行を読み取り、クライアントからデータを受信します。
String line = in.readLine();
文字列行 = in.readLine();
//受信したデータが空の場合(直接Enterを押した場合は空データではありません)、終了します。ループを終了して接続を閉じます。
if (行 == {
System.out.println( "クライアント「 n 」は BYE に入りました!");
System.out }
("Echo" n ":" line);
// ネットワークに接続して行を出力します。つまり、データをクライアントに送信します。
out.println("Echo " n ": " line);
s.close();
} catch (IOException e) {
System.err.println("IOException");
}
}
}
サーバー側プログラムでは、まず java.net パッケージの ServerSocket クラスを使用してサーバー側のリスニング ソケットを作成します。次に、ServerSocket クラスの accept メソッドを使用して、ユーザー要求を待機して受信します。サーバーは接続要求を受信すると、サーバーとクライアント間のデータ送信を個別に処理するスレッドを開始します。サーバー側データの受信と送信は、上で説明したクライアント側データの送信と導入と同じです。