目次へ

解答例 - 実習課題1 - 4.データグラム

(実習課題1)

第2節〜第3節で作成した、Daytimeサーバ・クライアントをUDPを利用したものに変更して下さい。クライアント側では、要求を送信して5秒以内に返答が無い場合、エラーメッセージを表示するようにして下さい。

解答例

/**
 * DatagramDaytimeClient.java
 * TECHSCORE Javaネットワークプログラミング4章 実習課題
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.net.chapter4;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketTimeoutException;

public class DatagramDaytimeClient {

    public static final int DAYTIME_PORT = 13;
    public static final int PACKET_SIZE = 1024;

    public static void main(String args[]) {
        DatagramSocket socket = null;
        InetSocketAddress remoteAddress;
        //受信データグラムインスタンスの作成
        byte buf[] = new byte[PACKET_SIZE];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //引数で指定したサーバに接続する
        if (args.length == 0) {
            System.out.println("引数に接続先のサーバを指定してください");
            return;
        } else if (args.length == 1) {
            System.out.println("デフォルトのポート番号を使用します");
            remoteAddress = new InetSocketAddress(args[0], DAYTIME_PORT);
        } else {
            remoteAddress =
                new InetSocketAddress(args[0], Integer.parseInt(args[1]));
        }
        try {
            socket = new DatagramSocket();
            //5秒以内に反応がない場合エラー出力する
            socket.setSoTimeout(5000);
            //パケットを送る
            byte[] bufs = "".getBytes();
            DatagramPacket sendPacket =
                new DatagramPacket(bufs, bufs.length, remoteAddress);
            //データグラムパケットの送信
            socket.send(sendPacket);
            //データグラムパケットの受信
            socket.receive(packet);
            //受信データグラムパケットの内容
            String daytime = new String(buf, 0, packet.getLength());
            System.out.println(daytime);
        } catch (SocketTimeoutException e) {
            System.out.println("サーバから反応がありません");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (socket != null) {
                socket.close();
            }
        }
    }

}
/**
 * DatagramDaytimeServer.java
 * TECHSCORE Javaネットワークプログラミング4章 実習課題
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.net.chapter4;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Date;

public class DatagramDaytimeServer {

    public static final int DAYTIME_PORT = 10013;
    public static final int PACKET_SIZE = 1024;

    public static void main(String args[]) {
        DatagramSocket socket = null;
        byte buf[] = new byte[PACKET_SIZE];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        try {
            socket = new DatagramSocket(DAYTIME_PORT);
            System.out.println(
                "DatagramDaytimeServerが起動しました : (port="
                    + socket.getLocalPort()
                    + ")");
            while (true) {
                socket.receive(packet);
                //時刻を求める                                                  
                String daytime = (new Date()).toString();
                byte[] bufs = daytime.getBytes();
                // 送信データグラムインスタンスの作成         
                DatagramPacket sendPacket =
                    new DatagramPacket(
                        bufs,
                        bufs.length,
                        packet.getSocketAddress());
                //データグラムパケットの送信
                socket.send(sendPacket);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (socket != null) {
                socket.close();
            }
        }
    }

}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp