JavaTM 2 Platform
Standard Ed. 5.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 setPerformancePreferences(int connectionTime, int latency, int bandwidth)
          この 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 を有効または無効にします。このオプションでタイムアウトを 0 以外の値に設定してこの 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 メソッドが呼び出され、実際のソケットが作成されます。

ファクトリがすでに設定されていないかぎり、メソッドに null を渡しても何も行われません。

セキュリティマネージャが存在する場合、このメソッドは最初にセキュリティマネージャの 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)

setPerformancePreferences

public void setPerformancePreferences(int connectionTime,
                                      int latency,
                                      int bandwidth)
この ServerSocket のパフォーマンス設定を行います。

ソケットはデフォルトで TCP/IP プロトコルを使用します。実装によっては、TCP/IP とは異なるパフォーマンス特性を持つ代替プロトコルが提供されることもあります。アプリケーションは、このメソッドを使用することで、実装で利用可能なプロトコルの選択時に、これらのかね合いの取り方を示す独自の設定を表現できます。

パフォーマンス設定は、接続時間の短さ、応答時間の速さ、帯域幅の広さの相対的な重要度を示す 3 つの整数値によって記述されます。整数の絶対値に関連性はなく、プロトコルを選択するために値を単に比較します。値が大きければより強い設定を示します。たとえば、アプリケーションが応答時間の速さと帯域幅の広さよりも接続時間の短さを優先する場合、このメソッドを (1, 0, 0) という値で呼び出すことができます。アプリケーションが応答時間の速さよりも帯域幅の広さを、また接続時間の短さよりも応答時間の速さを優先する場合、このメソッドを (0, 1, 2) という値で呼び出すことができます。

このソケットがバインドされたあとにこのメソッドを呼び出しても、何も行われません。これは、この機能を使用するためには、引数のないコンストラクタを使用してソケットを作成する必要があることを示します。

パラメータ:
connectionTime - 接続時間の短さの相対的な重要度を表す int
latency - 応答時間の速さの相対的な重要度を表す int
bandwidth - 帯域幅の広さの相対的な重要度を表す int
導入されたバージョン:
1.5

JavaTM 2 Platform
Standard Ed. 5.0

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

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。