iLEDについて

Javaサンプル

Netbeans

Libre Office Basicマクロ

その他


Author of This Site:
M. Kom. (kom9kmail@gmail.com)
Spam対策のため@マークは全角になっていますから、メール送信時には半角にしてください。

Java ServerSample.java および ClientSample.java

Javaによるチャットサーバーとクライアントの原型サンプルソース。
サーバーはクライアントからの接続を待ち、接続が行なわれたらクライアントから1行のデータを受け取り、 表示して接続を切断し、次の接続を待つ。もし、end が送られてきた場合にはプログラムを終了する。
クライアントはサーバーに接続し、メッセージを送信する。サーバーアドレスはコマンドラインの第1引数で指定。 ポートは30000に固定。第2引数で、メッセージを指定する。一行送ってプログラム終了する。endを指定すると、サーバーも停止する。
実際にインターネット越しに通信する場合は、使用ポートを開けておく等、ファイアウォールの設定変更が必要になります。
複数クライアントからの接続に対応したGUI版サーバーは、http://www.sys9.org/java25.phpをご覧ください。

//Socket通信サンプルプログラム(サーバー)
//クライアントからの接続を待ち、接続が行なわれたら
//1行のデータを受け取り、表示して接続を切断し、
//次の接続を待つ。 もし、end が送られてきた場合には
//プログラムを終了する。
import java.net.*;
import java.io.*;

class ServerSample 
{
  public static void main(String[] args)
  {
  try {
    // ポート番号は、30000
    //ソケットを作成
    ServerSocket serverSoc = new ServerSocket(30000);
    boolean flag=true;

    //クライアントからの接続を待機するaccept()メソッド。
    //accept()は、接続があるまで処理はブロックされる。
    //もし、GUIプログラムなどで、待機中も他の処理を行う必要があるときは
    //スレッドを使う。
    //accept()は接続時に新たなsocketを返す。これを使ってクライアントとの通信を行なう。
    Socket socket=null;
    while(flag){
      System.out.println("Waiting for Connection. ");
      socket = serverSoc.accept();//接続があるまで待機に入る
      //接続があれば次の命令に移る。
      System.out.println("Connect to " + socket.getInetAddress());

      //socketからのデータはInputStreamReaderに送り、さらに
      //BufferedReaderによってバッファリングする。
      BufferedReader reader = new BufferedReader
        (new InputStreamReader(socket.getInputStream()));

      //読み取ったデータを表示する。
      String line = reader.readLine();
      System.out.println("Message from client :" + line);

      //入力ストリームをクローズする。
      reader.close();
      //通信用ソケットの接続をクローズする。
      socket.close();
      //待ち受け用ソケットをクローズする。
      if(line.matches("end")){
        serverSoc.close();
        flag=false;
        System.out.println("Stopped.");
      }
    }

  }
  catch (IOException e) {
    e.printStackTrace();
  }
    } 
}


//************ここまで、サーバーソフト。
//************以下、クライアントソフト。


//クライアントサンプルプログラム
//サーバーに接続し、メッセージを送信する。
//サーバーアドレスはコマンドラインの第1引数で指定。
//ポートは30000に固定。
//第2引数で、メッセージを指定する。一行送ってプログラム終了する。
//endを指定すると、サーバーも停止する。

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

class ClientSample 
{
  public static void main(String[] args)
  {
    try {
    
  //アドレス情報を保持するsocketAddressを作成。
  //ポート番号は30000
    InetSocketAddress socketAddress = 
      new InetSocketAddress(args[0], 30000);
     
  //socketAddressの値に基づいて通信に使用するソケットを作成する。

  //
    Socket socket = new Socket();
  //タイムアウトは10秒(10000msec)
    socket.connect(socketAddress, 10000);

  //接続先の情報を入れるInetAddress型のinadrを用意する。
    InetAddress inadr;

  //inadrにソケットの接続先アドレスを入れ、nullである場合には
  //接続失敗と判断する。
  //nullでなければ、接続確立している。
    if ((inadr = socket.getInetAddress()) != null) {
      System.out.println("Connect to " + inadr);
    }else {
      System.out.println("Connection failed.");
      return;
    }

  //メッセージの送信処理
    String message = args[1];

  //PrintWriter型のwriterに、ソケットの出力ストリームを渡す。
    PrintWriter writer = new PrintWriter(socket.getOutputStream());
    System.out.println("Send message: " + message);

  //ソケットから出力する。
    writer.println(message);
  //終了処理
      writer.close();
      socket.close();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  } 
}