5.3 サーバ/クライアントモデルによる通信

  2.java.net.Socket の実装例

サンプルプログラム:サーバ側 MessageServer.java

 
import java.net.*;
import java.io.*;
import java.util.*;


/** Socketレベルで通信を行うクラス(サーバ側) */
public class MessageServer {


  /** ポート番号 */
    public static final int PORT = 10123;


  /** 転送メッセージ */
    public static String messages[]
      = {
          "********************************",
          "****  Welcome to My Server! ****",
          "********************************",
        };

    public static void main( String argv[] ) {
        try {
            ServerSocket serverSocket = new ServerSocket( PORT );
            while( true ) {
                Socket socket = serverSocket.accept();

		// 受信表示
                String remoteName = socket.getInetAddress().getHostName();
                Date date = new Date();
                String logMessage
                  = remoteName + " connected " + "at " + date.toString();
                System.out.println( logMessage );

		// メッセージ送信
                BufferedWriter bufwriter
                  = new BufferedWriter(
                      new OutputStreamWriter( socket.getOutputStream() ) );
                for( int i=0; i<messages.length; i++ ) {
                     bufwriter.write( messages[i], 0, messages[i].length() );
                     bufwriter.newLine();
                }
                bufwriter.close();
                socket.close();
            }
        }
        catch( SocketException e ) {
            System.err.println("Socket Error!");
            System.exit(-1);
        }
        catch( IOException e ) {
            System.err.println("IO Error!");
            System.exit(-1);
        }
    }
}




 
import java.io.*;
import java.net.*;


/** Socket通信を行うクラス(クライアント側) */
public class MessageClient {


  /** 通信に使用するポート番号 */
    public static final int PORT = 10123;


    public static void main( String argv[] ) {
        try {
            Socket socket = new Socket( argv[0], PORT );
            BufferedReader bufreader
              = new BufferedReader( 
                  new InputStreamReader( socket.getInputStream() ) );
            String line;
            while( ( line = bufreader.readLine() ) != null )
                System.out.println( line );
            bufreader.close();
            socket.close();
        }
        catch( ArrayIndexOutOfBoundsException e ) {
            System.err.println("Usage:java MessageClient hostname");
            System.exit(-1);
        }
        catch( UnknownHostException e ) {
            System.err.println( "Host not found." );
            System.exit(-1);
        }
        catch( SocketException e ) {
            System.err.println("Socket Error!");
            System.exit(-1);
        }
        catch( IOException e ) {
            System.err.println("IO Error!");
            System.exit(-1);
        }
    }
}




【実行例】

(1)サーバ側でMessageServer.classを実行(マシン名:localhost、IPアドレス:192.168.0.4)

java -classpath . MessageServer
localhost connected at Tue Oct 21 13:51:23 MDT 2003
THINKPAD2 connected at Tue Oct 21 13:52:51 MDT 2003

 

(2)クライアント側から、MessageClient.classを実行する

java -classpath . MessageClient
Usage:java MessageClient hostname
java -classpath . MessageClient localhost
********************************
**** Welcome to My Server! ****
********************************
java -classpath . MessageClient 192.168.0.4
********************************
**** Welcome to My Server! ****
********************************

    

 


2003年10月22日 4:56 更新