Javaソケットプログラミングの例へようこそ。すべてのサーバーは特定のシステム上で実行され、特定のポートでリッスンします。ソケットはポート番号にバインドされ、サーバーを実行するとソケット上でリッスンし、クライアントのリクエストを待ちます。たとえば、ポート8080で実行されるTomcatサーバーは、クライアントのリクエストを待ち、リクエストを受けると応答します。
Javaソケットプログラミング
ソケットは、ネットワーク上で実行される2つのプログラム間の双方向通信リンクの1つのエンドポイントです。ソケットはポート番号にバインドされており、TCPレイヤーはデータの送信先アプリケーションを識別することができます。Javaソケットプログラミングの例チュートリアルでは、JavaソケットサーバーとJavaソケットクライアントプログラムの書き方を学びます。また、サーバークライアントプログラムがソケット上でデータの読み書きを行う方法も学びます。java.net.Socketとjava.net.ServerSocketは、SocketとSocketサーバーを実装するJavaクラスです。
Javaソケットサーバーの例
package com.journaldev.socket;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* This class implements java Socket server
* @author pankaj
*
*/
public class SocketServerExample {
//static ServerSocket変数
private static ServerSocket server;
//ソケットサーバーポート、それがリッスンするポート
private static int port = 9876;
public static void main(String args[]) throws IOException, ClassNotFoundException{
//ソケットサーバーオブジェクトを作成します
server = new ServerSocket(port);
// 'exit'呼び出しを受信するか、プログラムが終了するまで、無期限にリッスンを続けます
while(true){
System.out.println("Waiting for the client request");
//ソケットを作成し、クライアントの接続を待機します
Socket socket = server.accept();
//ObjectInputStreamオブジェクトからソケットへの読み取り
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//ObjectInputStreamオブジェクトを文字列に変換します
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);
//ObjectOutputStreamオブジェクトを作成します
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
//オブジェクトをソケットに書き込む
oos.writeObject("Hi Client "+message);
//リソースを閉じる
ois.close();
oos.close();
socket.close();
//クライアントが終了要求を送信した場合、サーバーを終了します
if(message.equalsIgnoreCase("exit")) break;
}
System.out.println("Shutting down Socket server!!");
//ServerSocketオブジェクトを閉じます
server.close();
}
}
Javaソケットクライアント
package com.journaldev.socket;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* This class implements java socket client
* @author pankaj
*
*/
public class SocketClientExample {
public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
//localhostのIPアドレスを取得します。サーバーが他のIPで実行されている場合、そのIPを使用する必要があります
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
for(int i=0; i<5;i++){
//サーバーへのソケット接続を確立します
socket = new Socket(host.getHostName(), 9876);
//ObjectOutputStreamを使用してソケットに書き込みます
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Sending request to Socket Server");
if(i==4)oos.writeObject("exit");
else oos.writeObject(""+i);
//サーバーの応答メッセージを読み取ります
ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message: " + message);
//リソースを閉じます
ois.close();
oos.close();
Thread.sleep(100);
}
}
}
SocketServerExample
クラスを実行する必要があります。ソケットサーバーを実行すると、「クライアントのリクエストを待っています」と表示され、その後クライアントのリクエストを待機します。次に、SocketClientExample
クラスを実行すると、javaソケットサーバーにリクエストが送信され、応答メッセージがコンソールに表示されます。以下は、javaソケットサーバーの出力SocketServerExample
プログラムの出力です。
Waiting for the client request
Message Received: 0
Waiting for the client request
Message Received: 1
Waiting for the client request
Message Received: 2
Waiting for the client request
Message Received: 3
Waiting for the client request
Message Received: exit
Shutting down Socket server!!
そして、JavaソケットクライアントSocketClientExample
プログラムの出力は次の通りです。
Sending request to Socket Server
Message: Hi Client 0
Sending request to Socket Server
Message: Hi Client 1
Sending request to Socket Server
Message: Hi Client 2
Sending request to Socket Server
Message: Hi Client 3
Sending request to Socket Server
Message: Hi Client exit
これで、Javaでのソケットプログラミングの簡単な概要は終わりです。JavaソケットサーバーとJavaソケットクライアントプログラミングを始めるのに役立つことを願っています。参照:Oracle Doc
Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client