JavaTM 2
Platform
Std. Ed. v1.4.0

java.net
クラス ServerSocket

java.lang.Object
  |
  +--java.net.ServerSocket
直系の既知のサブクラス:
SSLServerSocket

public class ServerSocket
extends Object

サーバソケットを実装するクラスです。サーバソケットは、ネットワークを介して要求が送られてくるのを待ちます。その要求に基づいて処理を行い、場合によっては要求元に結果を返します。

サーバソケットの実際の処理は、SocketImpl クラスのインスタンスによって行われます。アプリケーションでは、ソケットを作成するソケットファクトリを変更して、ローカルファイアウォールに適したソケットを作成するようにアプリケーション自身を構成することができます。

導入されたバージョン:
JDK1.0
関連項目:
SocketImpl, setSocketFactory(java.net.SocketImplFactory), ServerSocketChannel

コンストラクタの概要
ServerSocket()
          アンバウンドのサーバソケットを作成します。
ServerSocket(int port)
          指定されたポート上にサーバソケットを作成します。
ServerSocket(int port, int backlog)
          サーバソケットを作成し、指定されたバックログで指定されたローカルポート番号にバインドします。
ServerSocket(int port, int backlog, InetAddress bindAddr)
          指定されたポート、待機するバックログおよびローカル IP アドレスを使用して、サーバを作成します。
 
メソッドの概要
 Socket accept()
          このソケットに対する接続要求を待機し、それを受け取ります。
 void bind(SocketAddress endpoint)
          ServerSocket を特定のアドレス (IP アドレスおよびポート番号) にバインドします。
 void bind(SocketAddress endpoint, int backlog)
          ServerSocket を特定のアドレス (IP アドレスおよびポート番号) にバインドします。
 void close()
          このソケットを閉じます。
 ServerSocketChannel getChannel()
          このソケットに関連する固有の ServerSocketChannel オブジェクトを返します (存在する場合)。
 InetAddress getInetAddress()
          このサーバソケットのローカルアドレスを返します。
 int getLocalPort()
          このソケットが接続を待機中のポートを返します。
 SocketAddress getLocalSocketAddress()
          このソケットがバインドされている端点のアドレスを返します。
 int getReceiveBufferSize()
          この ServerSocket で使われる SO_RCVBUF オプションの値を取得します。
 boolean getReuseAddress()
          SO_REUSEADDR が有効かどうかを調べます。
 int getSoTimeout()
          SO_TIMEOUT の設定を取得します。
protected  void implAccept(Socket s)
          ServerSocket のサブクラスでは、このメソッドを使用してソケットの独自のサブクラスを返すように accept() をオーバーライドできます。
 boolean isBound()
          ServerSocket のバインディング状態を返します。
 boolean isClosed()
          ServerSocket の閉じた状態を返します。
 void setReceiveBufferSize(int size)
          この ServerSocket から受け入れたソケットに対して SO_RCVBUF オプションのデフォルトの推奨値を設定します。
 void setReuseAddress(boolean on)
          SO_REUSEADDR ソケットオプションを有効または無効にします。
static void setSocketFactory(SocketImplFactory fac)
          アプリケーションのサーバソケット実装ファクトリを設定します。
 void setSoTimeout(int timeout)
          指定されたタイムアウト (ミリ秒単位) を使用して SO_TIMEOUT を有効または無効にします。
 String toString()
          このソケットの実装アドレスと実装ポートを String として返します。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

コンストラクタの詳細

ServerSocket

public ServerSocket()
             throws IOException
アンバウンドのサーバソケットを作成します。

例外:
IOException - ソケットを開くときの入出力エラー

ServerSocket

public ServerSocket(int port)
             throws IOException
指定されたポート上にサーバソケットを作成します。0 を指定すると、空いているポート上にソケットが作成されます。

受信する接続 (接続要求) の待ち行列の最大長は 50 に設定されます。待ち行列が埋まっているときに接続要求があると、接続は拒否されます。

アプリケーションでサーバソケットファクトリを指定している場合は、そのファクトリの createSocketImpl メソッドが呼び出され、実際のソケットが作成されます。そうでない場合は「プレーンな」ソケットが作成されます。

セキュリティマネージャが存在する場合、最初にセキュリティマネージャの checkListen メソッドが、引数として port を指定して呼び出され、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。

パラメータ:
port - ポート番号。空いているポートを使用する場合は 0
例外:
IOException - ソケットを開いているときに入出力エラーが発生した場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkListen メソッドがこの操作を許可しない場合
関連項目:
SocketImpl, SocketImplFactory.createSocketImpl(), setSocketFactory(java.net.SocketImplFactory), SecurityManager.checkListen(int)

ServerSocket

public ServerSocket(int port,
                    int backlog)
             throws IOException
サーバソケットを作成し、指定されたバックログで指定されたローカルポート番号にバインドします。ポート番号に 0 を指定すると、空いているポート上にソケットが作成されます。

受信する接続 (接続要求) の待ち行列の最大長は、backlog パラメータの値に設定されます。待ち行列が埋まっているときに接続要求があると、接続は拒否されます。

アプリケーションでサーバソケットファクトリを指定している場合は、そのファクトリの createSocketImpl メソッドが呼び出され、実際のソケットが作成されます。そうでない場合は「プレーンな」ソケットが作成されます。

セキュリティマネージャが存在する場合、最初にセキュリティマネージャの checkListen メソッドが、引数として port を指定して呼び出され、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。

backlog 引数は、0 より大きい正の値でなければなりません。渡された値が 0 以下の場合は、デフォルトの値が使用されます。

パラメータ:
port - 使用するポート。空いているポートを使用する場合は 0
backlog - キューの最大長
例外:
IOException - ソケットを開いているときに入出力エラーが発生した場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkListen メソッドがこの操作を許可しない場合
関連項目:
SocketImpl, SocketImplFactory.createSocketImpl(), setSocketFactory(java.net.SocketImplFactory), SecurityManager.checkListen(int)

ServerSocket

public ServerSocket(int port,
                    int backlog,
                    InetAddress bindAddr)
             throws IOException
指定されたポート、待機するバックログおよびローカル IP アドレスを使用して、サーバを作成します。複数ホームのホストでは、bindAddr 引数を使用して、1 つのアドレスに対する接続要求だけを受け取る ServerSocket を作成することができます。bindAddr に null を指定すると、デフォルト値によりすべてのローカルアドレスに対する接続を受け取ります。ポート番号には 0 から 65535 までの値を指定します。

セキュリティマネージャが存在する場合、最初にセキュリティマネージャの checkListen メソッドが、引数として port を指定して呼び出され、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。

backlog 引数は、0 より大きい正の値でなければなりません。渡された値が 0 以下の場合は、デフォルトの値が使用されます。

パラメータ:
port - ローカル TCP ポート
backlog - 待機するバックログ
bindAddr - サーバをバインドするローカル InetAddress
例外:
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkListen メソッドがこの操作を許可しない場合
IOException - ソケットを開いているときに入出力エラーが発生した場合
導入されたバージョン:
JDK1.1
関連項目:
SocketOptions, SocketImpl, SecurityManager.checkListen(int)
メソッドの詳細

bind

public void bind(SocketAddress endpoint)
          throws IOException
ServerSocket を特定のアドレス (IP アドレスおよびポート番号) にバインドします。

アドレスが null の場合は、システムにより一時的なポートと有効なローカルアドレスが選択されてソケットがバインドされます。

パラメータ:
endpoint - バインド先の IP アドレスおよびポート番号
例外:
IOException - バインド操作に失敗した場合、あるいはソケットがすでにバインドされている場合
SecurityException - SecurityManager が存在し、その checkListen メソッドがこの操作を許可しない場合
IllegalArgumentException - 端点がこのソケットでサポートされていない SocketAddress サブクラスである場合
導入されたバージョン:
1.4

bind

public void bind(SocketAddress endpoint,
                 int backlog)
          throws IOException
ServerSocket を特定のアドレス (IP アドレスおよびポート番号) にバインドします。

アドレスが null の場合は、システムにより一時的なポートと有効なローカルアドレスが選択されてソケットがバインドされます。

backlog 引数は、0 より大きい正の値でなければなりません。渡された値が 0 以下の場合は、デフォルトの値が使用されます。

パラメータ:
endpoint - バインド先の IP アドレスおよびポート番号
backlog - 待機するバックログの長さ
例外:
IOException - バインド操作に失敗した場合、あるいはソケットがすでにバインドされている場合
SecurityException - SecurityManager が存在し、その checkListen メソッドがこの操作を許可しない場合
IllegalArgumentException - 端点がこのソケットでサポートされていない SocketAddress サブクラスである場合
導入されたバージョン:
1.4

getInetAddress

public InetAddress getInetAddress()
このサーバソケットのローカルアドレスを返します。

戻り値:
このソケットの接続先のアドレス。ソケットがまだ接続されていない場合は null

getLocalPort

public int getLocalPort()
このソケットが接続を待機中のポートを返します。

戻り値:
このソケットが待機するポート番号。ソケットがまだバインドされていない場合は -1

getLocalSocketAddress

public SocketAddress getLocalSocketAddress()
このソケットがバインドされている端点のアドレスを返します。ソケットがバインドされていない場合は null を返します。

戻り値:
このソケットのローカル端点を表す SocketAddress。ソケットがまだバインドされていない場合は null
導入されたバージョン:
1.4
関連項目:
getInetAddress(), getLocalPort(), bind(SocketAddress)

accept

public Socket accept()
              throws IOException
このソケットに対する接続要求を待機し、それを受け取ります。メソッドは接続が確立されるまでブロックされています。

新しいソケット s が作成され、セキュリティマネージャが存在する場合、セキュリティマネージャの checkAccept メソッドが、引数として s.getInetAddress().getHostAddress() および s.getPort() を指定して呼び出され、この操作の実行が許可されていることを確認します。この結果、SecurityException になることがあります。

戻り値:
新しいソケット
例外:
IOException - 接続の待機中に入出力エラーが発生した場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkListen メソッドがこの操作を許可しない場合
SocketTimeoutException - 以前に setSoTimeout を使用してタイムアウトが設定され、そのタイムアウトに達した場合
IllegalBlockingModeException - このソケットに関連するチャネルが存在し、そのチャネルが非ブロッキングモードの場合
関連項目:
SecurityManager.checkAccept(java.lang.String, int)

implAccept

protected final void implAccept(Socket s)
                         throws IOException
ServerSocket のサブクラスでは、このメソッドを使用してソケットの独自のサブクラスを返すように accept() をオーバーライドできます。このため、FooServerSocket は一般的にこのメソッドに「空の」FooSocket を渡します。implAccept から戻ると、FooSocket はクライアントに接続されます。

パラメータ:
s - ソケット
例外:
IllegalBlockingModeException - このソケットに関連するチャネルが存在し、そのチャネルが非ブロッキングモードの場合
IOException - 接続の待機中に入出力エラーが発生した場合
導入されたバージョン:
JDK1.1

close

public void close()
           throws IOException
このソケットを閉じます。 現在 accept() でブロックされているすべてのスレッドが SocketException をスローします。

このソケットに関連するチャネルが存在する場合は、そのチャネルも閉じられます。

例外:
IOException - ソケットを閉じるときに入出力エラーが発生した場合

getChannel

public ServerSocketChannel getChannel()
このソケットに関連する固有の ServerSocketChannel オブジェクトを返します (存在する場合)。

チャネル自体が ServerSocketChannel.open メソッドを使用して作成された場合にだけ、サーバソケットにチャネルが存在します。

戻り値:
このソケットに関連するサーバソケットチャネル。このソケットがチャネル用に生成されなかった場合は null
導入されたバージョン:
1.4

isBound

public boolean isBound()
ServerSocket のバインディング状態を返します。

戻り値:
ServerSocket が正常にアドレスにバインドされている場合は true
導入されたバージョン:
1.4

isClosed

public boolean isClosed()
ServerSocket の閉じた状態を返します。

戻り値:
ソケットが閉じた場合は true
導入されたバージョン:
1.4

setSoTimeout

public void setSoTimeout(int timeout)
                  throws SocketException
指定されたタイムアウト (ミリ秒単位) を使用して SO_TIMEOUT を有効または無効にします。このオプションでタイムアウトをゼロ以外の値に設定してこの ServerSocket の accept() を呼び出すと、指定された時間だけブロックされます。タイムアウトが過ぎると、ServerSocket は有効なままで java.net.SocketTimeoutException が発生します。このオプションは、ブロック操作に入る前に有効にしておく必要があります。タイムアウトには 0 より大きい値を指定します。タイムアウトに 0 を指定すると、タイムアウトは無限と解釈されます。

パラメータ:
timeout - ミリ秒で表される、指定されたタイムアウト
例外:
SocketException - 基本となるプロトコルで TCP エラーなどのエラーが発生した場合
導入されたバージョン:
JDK1.1
関連項目:
getSoTimeout()

getSoTimeout

public int getSoTimeout()
                 throws IOException
SO_TIMEOUT の設定を取得します。このオプションが無効 (待ち時間が無限) の場合は、0 を返します。

戻り値:
SO_TIMEOUT 値
例外:
IOException - 入出力エラーが発生した場合
導入されたバージョン:
JDK1.1
関連項目:
setSoTimeout(int)

setReuseAddress

public void setReuseAddress(boolean on)
                     throws SocketException
SO_REUSEADDR ソケットオプションを有効または無効にします。

TCP 接続を閉じると、接続が閉じたあと、接続が一定の時間タイムアウト状態のままになることがあります (通常、TIME_WAIT 状態または 2MSL 待機状態と呼ばれる)。周知のソケットアドレスまたはポートを使用するアプリケーションの場合、ソケットアドレスまたはポートに関連する接続がタイムアウト状態にあると、ソケットを必要な SocketAddress にバインドできないことがあります。

bind(SocketAddress) を使用してソケットをバインドする前に SO_REUSEADDR を有効にすると、以前の接続がタイムアウト状態でもソケットをバインドすることができます。

ServerSocket が作成されると、SO_REUSEADDR の初期設定は定義されません。アプリケーションは getReuseAddress() を使用して SO_REUSEADDR の初期設定を判定することができます。

ソケットがバインドされた (isBound() を参照) あとで SO_REUSEADDR を有効または無効にする場合の動作は定義されていません。

パラメータ:
on - ソケットオプションを有効にするか無効にするかを指定
例外:
SocketException - SO_RESUEADDR ソケットオプションを有効または無効にするときにエラーが発生する場合、あるいはソケットが閉じている場合
導入されたバージョン:
1.4
関連項目:
getReuseAddress(), bind(SocketAddress), isBound(), isClosed()

getReuseAddress

public boolean getReuseAddress()
                        throws SocketException
SO_REUSEADDR が有効かどうかを調べます。

戻り値:
SO_REUSEADDR が有効かどうかを示す boolean
例外:
SocketException - 基本となるプロトコルで TCP エラーなどのエラーが発生した場合
導入されたバージョン:
1.4
関連項目:
setReuseAddress(boolean)

toString

public String toString()
このソケットの実装アドレスと実装ポートを String として返します。

オーバーライド:
クラス Object 内の toString
戻り値:
このソケットの文字列表現

setSocketFactory

public static void setSocketFactory(SocketImplFactory fac)
                             throws IOException
アプリケーションのサーバソケット実装ファクトリを設定します。ファクトリを設定できるのは 1 回だけです。

アプリケーションで新しいサーバソケットを作成すると、ソケット実装ファクトリの createSocketImpl メソッドが呼び出され、実際のソケットが作成されます。

セキュリティマネージャが存在する場合、このメソッドは最初にセキュリティマネージャの checkSetFactory メソッドを呼び出すことにより、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。

パラメータ:
fac - 目的のファクトリ
例外:
IOException - ソケットファクトリの設定中に入出力エラーが発生した場合
SocketException - ファクトリがすでに定義されている場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkSetFactory メソッドがこの操作を許可しない場合
関連項目:
SocketImplFactory.createSocketImpl(), SecurityManager.checkSetFactory()

setReceiveBufferSize

public void setReceiveBufferSize(int size)
                          throws SocketException
この ServerSocket から受け入れたソケットに対して SO_RCVBUF オプションのデフォルトの推奨値を設定します。受け入れたソケットに実際に設定された値は、accept() によりソケットが返されたあとで、Socket.getReceiveBufferSize() を呼び出して判定する必要があります。

SO_RCVBUF の値は、内部ソケット受信バッファのサイズの設定と、リモートピアに通知される TCP 受信ウィンドウのサイズの設定の両方に使用されます。

その後、Socket.setReceiveBufferSize(int) を呼び出してこの値を変更することができます。ただし、アプリケーションで 64K バイトを超える受信ウィンドウを許可する場合は、RFC1323 に定義されているように、ローカルアドレスにバインドするに推奨値を ServerSocket で設定する必要があります。このことは、引数なしのコンストラクタを使用して ServerSocket を作成し、次に setReceiveBufferSize() を呼び出して、最後に bind() を呼び出して ServerSocket をアドレスにバインドする必要があることを意味します。

これに失敗してもエラーは発生せず、バッファサイズは要求された値に設定されます。ただし、この ServerSocket から受け取るソケットの TCP 受信ウィンドウは 64K バイト以下になります。

パラメータ:
size - 受信バッファ用として設定するサイズ。0 より大きい値を指定する必要がある
例外:
SocketException - 基本となるプロトコルで TCP エラーなどのエラーが発生した場合
IllegalArgumentException - 値が 0 または負の値である場合
導入されたバージョン:
1.4
関連項目:
getReceiveBufferSize()

getReceiveBufferSize

public int getReceiveBufferSize()
                         throws SocketException
この ServerSocket で使われる SO_RCVBUF オプションの値を取得します。これは、この ServerSocket から受け取るソケットに使用される推奨バッファサイズです。

受け入れたソケットに実際に設定された値は Socket.getReceiveBufferSize() を呼び出して判定することに注意してください。

戻り値:
この Socket の SO_RCVBUF オプションの値
例外:
SocketException - 基本となるプロトコルで TCP エラーなどのエラーが発生した場合
導入されたバージョン:
1.4
関連項目:
setReceiveBufferSize(int)

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.