ソケット | 説明 |
---|---|
ストリーム・ソケット | TCP プロトコル |
データグラム・ソケット | UDP プロトコル |
役割 | 説明 |
---|---|
クライアント | |
サーバー |
1. サーバー用ソケットの作成 | ServerSocket serverSock = new ServerSocket(ポート番号); |
2. クライアントからの接続要求受付 | Socket sock = serverSock.accept(); |
3. ストリームの獲得 |
InputStream is = sock.getInputSream();
または OutputStream os = sock.getOutputSream(); |
4. 入出力 | |
5. ソケットのクローズ | sock.close(); |
1. クライアント用ソケットの作成およびサーバーへの接続 | Socket sock = new Socket(サーバーのIP アドレス,サーバーのポート番号); |
2. ストリームの獲得 |
InputStream is = sock.getInputSream();
または OutputStream os = sock.getOutputSream(); |
3. 入出力 | |
4. ソケットのクローズ | sock.close(); |
□サーバー "SocketServer01.java"
□ 実行結果
□クライアント "SocketClient01.java"
□ 実行結果
$ java SocketServer01 12345
Running...
Socket[addr=/127.0.0.1,port=4581,localport=12345] was accepted at Tue Jun 29 10:15:17 JST 2004
$ java SocketClient01 localhost 12345
Message from server: Tue Jun 29 10:15:23 JST 2004
□サーバー "SocketServer02.java"
□ 実行結果
□ 実行結果
□サーバー "SocketServer03.java"
□ 実行結果
□ 実行結果
$ java SocketServer02 12345
Running...
Socket[addr=/127.0.0.1,port=4581,localport=12345] was accepted at Tue Jun 29 10:15:17 JST 2004
□クライアント "SocketClient01.java"
$ java SocketClient01 localhost 12345
Message from server: Tue Jun 29 10:15:23 JST 2004
これには、訪問者数をテキスト形式のファイルに保存することで実現します。
クライアントの変更はありません。
$ java SocketServer02 12345
Running...
Socket[addr=/127.0.0.1,port=4581,localport=12345] was accepted at Tue Jun 29 10:15:17 JST 2004
□クライアント "SocketClient01.java"
$ java SocketClient01 localhost 12345
Message from server: Tue Jun 29 10:15:23 JST 2004
- // 1603
- // package application;
- import java.io.*;
- import java.net.*;
- // 商品クラスをテストするクラスです。
- public class TestProduct {
- public static void main(String[] args) throws Exception {
- final int SERVER_PORT = 54321;
- final String serverName = args[0];
- Socket sock = null;
- BufferedReader br = null;
- try {
- br = new BufferedReader(new InputStreamReader(System.in));
- String str = null;
- while ((str = br.readLine()) != null && !str.toUpperCase().equals("X")) {
- // クライアントと対話処理するストリーム、ソケットを生成
- sock = new Socket(serverName, SERVER_PORT);
- DataInputStream dis =
- new DataInputStream(sock.getInputStream());
- DataOutputStream dos =
- new DataOutputStream(sock.getOutputStream());
- dos.writeUTF(str);
- System.out.println("商品コード " + str + " の商品は " + dis.readUTF() + " です。");
- // ストリーム、ソケットをクローズ
- dos.close();
- dis.close();
- sock.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- br.close();
- sock.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
$ java TestProduct localhost A001 商品コード A001 の商品は [A001, パソコン, 188000] です。 B001 商品コード B001 の商品は [Not Found] です。 C001 商品コード C001 の商品は [C001, DVD-ROM, 9200] です。□サーバー "ProductServer.java"
- // 1603
- // package server;
- // import product.*;
- import java.util.*;
- import java.net.*;
- import java.io.*;
- // 商品サーバーです。
- public class ProductServer {
- public static void main(String[] args) throws Exception {
- final int SERVER_PORT = 54321;
- TreeMap p = new TreeMap();
- SetProduct s = new SetProduct("SA01", "パソコン・セット", 10, p);
- System.out.println("セット商品のインスタンスを生成しました。 s = " + s);
- System.out.println();
- AdminProduct ap = new AdminProduct();
- ap.read(s, args[0]);
- System.out.println("セット商品のデータを設定しました。 s = " + s);
- // サーバ用ソケットの作成
- ServerSocket serversock = new ServerSocket(SERVER_PORT);
- // 非同期制御データ・オブジェクトの作成
- while (true) {
- // クライアントからの接続要求待ち
- Socket sock = serversock.accept();
- System.out.println("socket = " + sock);
- // クライアントと対話処理するストリーム、ソケットを生成
- DataInputStream dis =
- new DataInputStream(sock.getInputStream());
- DataOutputStream dos =
- new DataOutputStream(sock.getOutputStream());
- String code = dis.readUTF();
- String result = s.query(code);
- System.out.println(" [" + code + " = " + result + "]");
- dos.writeUTF(result);
- // ストリーム、ソケットをクローズ
- dos.close();
- dis.close();
- sock.close();
- }
- }
- }
$ java ProductServer products.txt セット商品のインスタンスを生成しました。 s = [SA01, パソコン・セット, 10, 0] セット商品のデータを設定しました。 s = [SA01, パソコン・セット, 10, 207360] socket = Socket[addr=/127.0.0.1,port=4104,localport=54321] [A001 = [A001, パソコン, 188000]] socket = Socket[addr=/127.0.0.1,port=4105,localport=54321] [B001 = [Not Found]] socket = Socket[addr=/127.0.0.1,port=4106,localport=54321] [C001 = [C001, DVD-ROM, 9200]]
1. データグラム・ソケットの作成 | DatagramSocket ds = new DatagramSocket(ポート番号); |
2. データの受信 | ds.receive(DatagramPacket オブジェクト) ; |
3. データの送信 | ds.send(DatagramPacket オブジェクト) ; |
4. ソケットのクローズ | ds.close(); |
1. データグラム・ソケットの作成 | DatagramSocket ds = new DatagramSocket(ポート番号); |
2. データの送信 | ds.send(DatagramPacket オブジェクト) ; |
3. データの受信 | ds.receive(DatagramPacket オブジェクト) ; |
4. ソケットのクローズ | ds.close(); |
□受信側 "UdpReceive01.java"
□ 実行結果
□送信側 "UdpSend01.java"
□ 実行結果
$ java UdpReceive01
Waiting...
Hello
(*) CTRL+C で停止してください。
$ java UdpSend01 localhost Hello
Send done