iLEDについて

Javaサンプル

Netbeans

Libre Office Basicマクロ

その他


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

Java ソースコード GUIclient.java

ソケット通信GUIクライアントサンプル(一部)。

ソケット通信GUIサーバーサンプルとあわせてお読みください。

TCP/IPソケットプログラミング Java編
↑この本はJavaの通信プログラムの基本理解に手頃です。あまり厚くないのでとっつきやすい。
//このプログラムは、GUIserver.javaのサーバーに接続し、
//接続したname欄の文字データを送信します。
//その後、[送信]ボタンをクリックすると送信メッセージ欄の文字データを
//サーバーに送ります。
//サーバーからのデータは、0.5秒ごとにタイマー割り込みでチェックし、
//受信データがあればjTextAreaに表示します。。
//切断ボタンをクリックするか、サーバーから送られてきた文字列が
//「!quit」であった場合には通信を終了します。
//
//受信を繰り返す場合に、BufferedReaderのreadLine()メソッドを使うと、
//そこで動作がブロックされてしまうため、対策を施しています。
//このプログラムは、GUIserver.javaを接続先サーバーとして動作します。
//プログラム作成にはNetbeans7.1を使っています。
//GUIデザインに関する部分は省略し、ソケット通信等に関する部分のみ示しています。


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;


/**
 *
 * @author kom
 */
public class GUIclient extends javax.swing.JFrame  implements ActionListener{

  javax.swing.Timer timer;
  boolean connectFlag = false;
  Socket cliSocket = null;
  DataOutputStream outStream = null;
  InputStream inpStream  = null;
  InputStreamReader inprStream = null;
  BufferedReader inStream = null;
  static String quitcmd = "!quit";

  public GUIclient() {
    initComponents();
    
    timer = new javax.swing.Timer(500, this); //0.5秒毎に割り込み発生
    ConnectBtn.setEnabled(true);
    DisconectBtn.setEnabled(false);
  }


  public void actionPerformed(ActionEvent e){ //Timer割り込みメソッド
    if(connectFlag){
      textReceive();
    }else{
      disconnect();
    }
  }
  
    private void ConnectBtnActionPerformed(java.awt.event.ActionEvent evt) {                                           
    //接続処理。タイムアウト10秒
    try {
      cliSocket = new Socket();
      cliSocket.connect(new InetSocketAddress(jTextIPaddress.getText(),
          Integer.parseInt(jTextPort.getText())), 10000);
      outStream = new DataOutputStream(cliSocket.getOutputStream());
      inpStream  = cliSocket.getInputStream();
      inprStream =new InputStreamReader(inpStream);
            inStream = new BufferedReader(inprStream);
      connectFlag=true;

      jLabelCondition.setText("接続完了");
      jTextAreaLog.append("Connected to the Server." + "\n");

      textSend(jTextName.getText());
      timer.start(); //受信はタイマーにより逐次行う
      ConnectBtn.setEnabled(false);
      DisconectBtn.setEnabled(true);
    } catch (UnknownHostException e) {
            System.err.println("Unknown Host.");
        } catch (IOException e) {
            System.err.println("IOException."+e);
      jTextAreaLog.append("Server does not respond." + "\n");
      System.out.println("Server does not respond.");
        }
    ConnectBtn.setSelected(false);
    }                                          

  private void textSend(String t){ // ソケットへデータ送信

    if (cliSocket != null && outStream != null && inpStream != null) {
            try {
                // メッセージを送ります
                outStream.writeBytes(t);
                outStream.writeBytes("\n");
        outStream.flush();
        jTextAreaLog.append("-> " + t + "\n");
            } catch (IOException e) {
                System.err.println("IOException: " + e);
            }
        }
  }
  
  public void textReceive(){ // ソケットからデータ受信
    if (cliSocket != null ) {
      try {
        String response;
        //まずInputStreamのavairable()で受信データがあるか確認してから
        while(inpStream.available()!=0){ 
          //受信データがあれば、BufferedReaderのreadLine()で1行読取。
          response = inStream.readLine(); 
          System.out.println("From Server: " + response);
          jTextAreaLog.append("<- " + response + "\n");
          if(response.equals(quitcmd)){ //もし終了コマンドが入っていたら
            connectFlag=false;
            break;
          }
        }
      } catch (IOException e) {
        System.err.println("IOException: " + e);
      }
    }
  }
  
  public void disconnect(){
    if (cliSocket != null){
      jLabelCondition.setText("未接続");
      try {
        timer.stop();
        outStream.close();
        inStream.close();
        inprStream.close();
        inpStream.close();
        cliSocket.close();
        jTextAreaLog.append("Disconnect." + "\n");
      } catch (IOException e) {
        System.err.println("Disconnect - IOException: " + e);
      }
    }
    ConnectBtn.setEnabled(true);
    DisconectBtn.setEnabled(false);
  }
  
    private void jButtonSendActionPerformed(java.awt.event.ActionEvent evt) {                                            
    textSend(jTextSendMsg.getText());
    }                                           

    private void DisconectBtnActionPerformed(java.awt.event.ActionEvent evt) {                                             
    if (cliSocket != null){
      textSend(quitcmd);
      connectFlag=false;
      disconnect();
    }
    }                                            

}

動作画面例

下の画像は、クライアントを3つ同一PC上で接続した実行時の画像です。

fig

Socket Table Sample

Kom., 2013