package jp.jbxl; import java.net.*; /** * TCP Berkeley Socketのサーバクラス
* @author Fumi.Iseki * @version 1.0 */ public class TCP_Server { private ServerSocket serverSock = null; // サーバーソケット /** * errFlag true:オブジェクトは正常に動作. false:オブジェクトでエラーが発生. */ public boolean errFlag = false; public int connectMax = 50; /** * コンストラクタ.初期化のみ行なう.
* ソケットは作成しない. */ public TCP_Server() { init(); } /** * オブジェクトを生成し,TCPサーバソケットを作成する.
* ポート番号portにソケットを作成する.同時最大接続数はデフォルトで50.
* 接続待ち(accept)行なわない. * @param port ポート番号. */ public TCP_Server(int port) { init(); try { serverSock = new ServerSocket(port, connectMax); } catch (Exception er) { //er.printStackTrace(); serverSock = null; errFlag = true; } } /** * オブジェクトを生成し,TCPサーバソケットを作成する.
* ポート番号 portに同時最大接続数 cmaxのソケットを作成する.
* 接続待ち(accept)は行なわない.
* @param port ポート番号. * @param cmax 同時最大接続数. */ public TCP_Server(int port, int cmax) { init(); try { serverSock = new ServerSocket(port, cmax); } catch (Exception er) { //er.printStackTrace(); serverSock = null; errFlag = true; } } /** * すでにあるオブジェクトに対して,新しいTCPサーバソケットを作成(オープン)する
* ポート番号portにソケットを作成する.同時最大接続数は50.
* 接続待ち(accept)は行なわない. * @param port ポート番号 * @throws Exception ソケットのオープンエラー */ public void open(int port) throws Exception { try { if (serverSock!=null) { serverSock.close(); serverSock = null; } serverSock = new ServerSocket(port, connectMax); } catch (Exception er) { //er.printStackTrace(); serverSock = null; errFlag = true; throw new Exception("TCP_Server.open: Open Server Socket Faled."); } } /** * すでにあるオブジェクトに対して,新しいTCPサーバソケットを作成(オープン)する
* ポート番号 portに同時最大接続数 cmaxのソケットを作成する.
* 接続待ち(accept)は行なわない. * @param port ポート番号 * @param cmax 同時最大接続数. * @throws Exception ソケットのオープンエラー */ public void open(int port, int cmax) throws Exception { try { if (serverSock!=null) { serverSock.close(); serverSock = null; } serverSock = new ServerSocket(port, cmax); } catch (Exception er) { //er.printStackTrace(); serverSock = null; errFlag = true; throw new Exception("TCP_Server.open: Open Server Socket Faled."); } } /** * ソケットへの接続待ち状態に入り,接続があった場合,その接続に対する通信ソケット用のTCPオブジェクトを返す. * * @return 通信用の TCPオブジェクト * @throws Exception 接続待ち失敗 */ public TCP_Socket accept() throws Exception { errFlag = false; TCP_Socket tcp = null; try { Socket sock = serverSock.accept(); tcp = new TCP_Socket(sock); } catch (Exception er) { //er.printStackTrace(); errFlag = true; throw new Exception("TCP_Server.accept: Accept Faled."); } return tcp; } /** * TCP_Serverオブジェクトの初期化 * */ public void init() { serverSock = null; errFlag = false; } /** * TCP_Serverソケットのクローズ * */ public void close() { // try { if (serverSock!=null) serverSock.close(); init(); } catch (Exception er) { //er.printStackTrace(); serverSock = null; errFlag = true; } } protected void finalize() { this.close(); } }