JavaTM Platform
Standard Ed. 6

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 引数を使用すれば、特定のアドレスに対する接続要求だけを受信する 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 - セキュリティーマネージャーが存在し、その checkAccept メソッドがこの操作を許可しない場合
SocketTimeoutException - 以前に setSoTimeout を使ってタイムアウトが設定されていて、そのタイムアウトに達した場合
IllegalBlockingModeException - このソケットに関連するチャネルが存在し、そのチャネルが非ブロッキングモードであり、受け入れ準備の整った接続が存在しない場合y
関連項目:
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
アプリケーションのサーバーソケット実装ファクトリを設定します。ファクトリを指定できるのは一度だけです。  

アプリケーションで新しいサーバーソケットを作成すると、ソケット実装ファクトリの 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) を呼び出すことで値を変更できます。ただし、アプリケーションが RFC1323 で定義されている 64K バイトを超える受信ウィンドウを使用可能にする必要がある場合には、ローカルアドレスにバインドする前に 推奨値を 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 Platform
Standard Ed. 6

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

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