public class ServerSocket extends Object implements Closeable
サーバーソケットの実際の処理は、SocketImpl
クラスのインスタンスによって実行されます。アプリケーションは、ソケット実装を作成するソケットファクトリを変更することで、ローカルファイアウォールに適したソケットを作成するようにアプリケーション自体を構成することができます。
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()
このソケットがバインドされている端点のアドレスを返します。ソケットがバインドされていない場合は
null を返します。 |
int |
getReceiveBufferSize()
この ServerSocket で使われる SO_RCVBUF オプションの値を取得します。これは、この ServerSocket から受け取るソケットに使用される推奨バッファーサイズです。
|
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 として返します。 |
public ServerSocket() throws IOException
IOException
− ソケットを開くときの入出力エラー。public ServerSocket(int port) throws IOException
0
は、そのポート番号が自動的に (通常は一時ポート範囲から) 割り当てられたことを意味します。このポート番号を取得するには、getLocalPort
を呼び出します。
受信する接続 (接続要求) のキューの最大長は、50
に設定されます。キューが埋まっているときに接続要求があると、接続は拒否されます。
アプリケーションでサーバーソケットファクトリを指定している場合は、そのファクトリの createSocketImpl
メソッドが呼び出され、実際のソケットが作成されます。そうでない場合は「プレーンな」ソケットが作成されます。
セキュリティーマネージャーが存在する場合、この操作が許可されるように、その checkListen
メソッドが port
引数をその引数として指定して呼び出されます。この結果、SecurityException がスローされることがあります。
port
- ポート番号、または自動的に割り当てられたポート番号を使用する場合は 0
。IOException
- ソケットを開いているときに入出力エラーが発生した場合。SecurityException
- セキュリティーマネージャーが存在し、その checkListen
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- port パラメータが指定された有効なポート値の範囲 (0 から 65535) 外である場合。SocketImpl
, SocketImplFactory.createSocketImpl()
, setSocketFactory(java.net.SocketImplFactory)
, SecurityManager.checkListen(int)
public ServerSocket(int port, int backlog) throws IOException
0
は、そのポート番号が自動的に (通常は一時ポート範囲から) 割り当てられたことを意味します。このポート番号を取得するには、getLocalPort
を呼び出します。
受信する接続 (接続要求) のキューの最大長は、backlog
パラメータに設定されます。キューが埋まっているときに接続要求があると、接続は拒否されます。
アプリケーションでサーバーソケットファクトリを指定している場合は、そのファクトリの createSocketImpl
メソッドが呼び出され、実際のソケットが作成されます。そうでない場合は「プレーンな」ソケットが作成されます。
セキュリティーマネージャーが存在する場合、この操作が許可されるように、その checkListen
メソッドが port
引数をその引数として指定して呼び出されます。この結果、SecurityException がスローされることがあります。
backlog
引数は、ソケットの保留されている接続の要求された最大数です。正確なセマンティクスは実装に固有です。たとえば、実装が最大長を規定していたり、パラメータをまったく無視したりする場合があります。指定される値は 0
より大きくなければいけません。0
以下の場合は、実装固有のデフォルトが使用されます。
port
- ポート番号、または自動的に割り当てられたポート番号を使用する場合は 0
。backlog
- 着信接続のキューの要求された最大長。IOException
- ソケットを開いているときに入出力エラーが発生した場合。SecurityException
- セキュリティーマネージャーが存在し、その checkListen
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- port パラメータが指定された有効なポート値の範囲 (0 から 65535) 外である場合。SocketImpl
, SocketImplFactory.createSocketImpl()
, setSocketFactory(java.net.SocketImplFactory)
, SecurityManager.checkListen(int)
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
0
は、そのポート番号が自動的に (通常は一時ポート範囲から) 割り当てられたことを意味します。このポート番号を取得するには、getLocalPort
を呼び出します。
セキュリティーマネージャーが存在する場合、このメソッドによってその checkListen
メソッドが port
引数をその引数として指定して呼び出され、この操作が許可されるかどうかが確認されます。この結果、SecurityException がスローされることがあります。
backlog
引数は、ソケットの保留されている接続の要求された最大数です。正確なセマンティクスは実装に固有です。たとえば、実装が最大長を規定していたり、パラメータをまったく無視したりする場合があります。指定される値は 0
より大きくなければいけません。0
以下の場合は、実装固有のデフォルトが使用されます。
port
- ポート番号、または自動的に割り当てられたポート番号を使用する場合は 0
。backlog
- 着信接続のキューの要求された最大長。bindAddr
− サーバーをバインドするローカル InetAddressSecurityException
- セキュリティーマネージャーが存在し、その checkListen
メソッドでこの操作が許可されていない場合。IOException
- ソケットを開いているときに入出力エラーが発生した場合。IllegalArgumentException
- port パラメータが指定された有効なポート値の範囲 (0 から 65535) 外である場合。SocketOptions
, SocketImpl
, SecurityManager.checkListen(int)
public void bind(SocketAddress endpoint) throws IOException
ServerSocket
を特定のアドレス (IP アドレスおよびポート番号) にバインドします。
アドレスが null
の場合は、システムにより一時的なポートと有効なローカルアドレスが選択されてソケットがバインドされます。
endpoint
- バインド先の IP アドレスおよびポート番号。IOException
- バインド操作に失敗した場合、あるいはソケットがすでにバインドされている場合。SecurityException
- SecurityManager
が存在し、その checkListen
メソッドがこの操作を許可しない場合。IllegalArgumentException
- 端点が、このソケットによってサポートされていない SocketAddress サブクラスである場合。public void bind(SocketAddress endpoint, int backlog) throws IOException
ServerSocket
を特定のアドレス (IP アドレスおよびポート番号) にバインドします。
アドレスが null
の場合は、システムにより一時的なポートと有効なローカルアドレスが選択されてソケットがバインドされます。
backlog
引数は、ソケットの保留されている接続の要求された最大数です。正確なセマンティクスは実装に固有です。たとえば、実装が最大長を規定していたり、パラメータをまったく無視したりする場合があります。指定される値は 0
より大きくなければいけません。0
以下の場合は、実装固有のデフォルトが使用されます。
endpoint
- バインド先の IP アドレスおよびポート番号。backlog
- 着信接続のキューの要求された最大長。IOException
- バインド操作に失敗した場合、あるいはソケットがすでにバインドされている場合。SecurityException
- SecurityManager
が存在し、その checkListen
メソッドがこの操作を許可しない場合。IllegalArgumentException
- 端点が、このソケットによってサポートされていない SocketAddress サブクラスである場合。public InetAddress getInetAddress()
ソケットが閉じられる
前にバインドされていた場合、このメソッドはソケットが閉じられたあとも引き続きローカルアドレスを返します。
null
。public int getLocalPort()
ソケットが閉じられる
前にバインドされていた場合、このメソッドはソケットが閉じられたあとも引き続きポート番号を返します。
public SocketAddress getLocalSocketAddress()
null
を返します。
ソケットが閉じられる
前にバインドされていた場合、このメソッドはソケットが閉じられたあとも引き続き端点のアドレスを返します。
SocketAddress
。ソケットがまだバインドされていない場合は null
。getInetAddress()
, getLocalPort()
, bind(SocketAddress)
public Socket accept() throws IOException
新しいソケット s
が作成され、セキュリティーマネージャーが存在する場合には、その checkAccept
メソッドが引数として s.getInetAddress().getHostAddress()
および s.getPort()
を指定して呼び出され、この操作の実行が許可されていることが確認されます。この結果、SecurityException がスローされることがあります。
IOException
- 接続の待機中に入出力エラーが発生した場合。SecurityException
- セキュリティーマネージャーが存在し、その checkAccept
メソッドでこの操作が許可されていない場合。SocketTimeoutException
− 以前に setSoTimeout を使ってタイムアウトが設定されていて、そのタイムアウトに達した場合。IllegalBlockingModeException
− このソケットに関連するチャネルが存在し、そのチャネルが非ブロッキングモードであり、受け入れ準備の整った接続が存在しない場合SecurityManager.checkAccept(java.lang.String, int)
protected final void implAccept(Socket s) throws IOException
s
− ソケットIllegalBlockingModeException
- このソケットに関連するチャネルが存在し、そのチャネルが非ブロックモードである場合。IOException
- 接続の待機中に入出力エラーが発生した場合。public void close() throws IOException
accept()
で現在ブロックされているすべてのスレッドが SocketException
をスローします。
このソケットに関連するチャネルが存在する場合は、そのチャネルも閉じられます。
close
、インタフェース: Closeable
close
、インタフェース: AutoCloseable
IOException
- ソケットを閉じるときに入出力エラーが発生した場合。public ServerSocketChannel getChannel()
ServerSocketChannel
オブジェクトを返します (存在する場合)。
チャネル自体が ServerSocketChannel.open
メソッドを使用して作成された場合にだけ、サーバーソケットにチャネルが存在します。
public boolean isBound()
public boolean isClosed()
public void setSoTimeout(int timeout) throws SocketException
timeout
− ミリ秒で表される、指定されたタイムアウトSocketException
- 使用しているプロトコルでエラー (TCP エラーなど) が発生した場合。getSoTimeout()
public int getSoTimeout() throws IOException
IOException
- 入出力エラーが発生した場合setSoTimeout(int)
public void setReuseAddress(boolean on) throws SocketException
TCP 接続をクローズする場合、接続クローズ後の一定期間、その接続がタイムアウト状態 (通常、TIME_WAIT 状態または 2MSL 待機状態と呼ばれる) にとどまる可能性があります。既知のソケットアドレスまたはポートを使用するアプリケーションの場合、ソケットアドレスまたはポートに関連する接続がタイムアウト状態にあると、ソケットを必要な SocketAddress にバインドできないことがあります。
bind(SocketAddress)
を使用してソケットをバインドする前に SO_REUSEADDR を有効にすると、以前の接続がタイムアウト状態でもソケットをバインドできます。
ServerSocket が作成されるときに、SO_REUSEADDR の初期設定は定義されていません。アプリケーションは getReuseAddress()
を使用して、SO_REUSEADDR の初期設定を確認できます。
ソケットがバインドされた (isBound()
を参照) あとで SO_REUSEADDR を有効または無効にする場合の動作は定義されていません。
on
- ソケットオプションを有効にするか無効にするかを指定SocketException
- SO_RESUEADDR ソケットオプションの有効化または無効化時にエラーが発生した場合、またはソケットがクローズされている場合。getReuseAddress()
, bind(SocketAddress)
, isBound()
, isClosed()
public boolean getReuseAddress() throws SocketException
boolean
値。SocketException
- 使用しているプロトコルでエラー (TCP エラーなど) が発生した場合。setReuseAddress(boolean)
public String toString()
String
として返します。public static void setSocketFactory(SocketImplFactory fac) throws IOException
アプリケーションで新しいサーバーソケットを作成すると、ソケット実装ファクトリの createSocketImpl
メソッドが呼び出され、実際のソケットが作成されます。
このメソッドに null
を渡しても、ファクトリがすでに設定されていないかぎり、それは無操作になります。
セキュリティーマネージャーが存在する場合、この操作が許可されるように、このメソッドは最初にセキュリティーマネージャーの checkSetFactory
メソッドを呼び出します。この結果、SecurityException がスローされることがあります。
fac
- 目的のファクトリ。IOException
- ソケットファクトリの設定中に入出力エラーが発生した場合。SocketException
- ファクトリがすでに定義されている場合。SecurityException
- セキュリティーマネージャーが存在し、その checkSetFactory
メソッドでこの操作が許可されていない場合。SocketImplFactory.createSocketImpl()
, SecurityManager.checkSetFactory()
public void setReceiveBufferSize(int size) throws SocketException
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 または負の値である場合。getReceiveBufferSize()
public int getReceiveBufferSize() throws SocketException
受け入れたソケットに実際に設定された値は、Socket.getReceiveBufferSize()
を呼び出して判定することに注意してください。
SocketException
- 使用しているプロトコルでエラー (TCP エラーなど) が発生した場合。setReceiveBufferSize(int)
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
ソケットはデフォルトで、TCP/IP プロトコルを使用します。実装によっては、TCP/IP とは異なるパフォーマンス特性を持つ代替プロトコルを提供することもあります。アプリケーションは、このメソッドを使用することで、実装で利用可能なプロトコルの選択時に、これらのかね合いの取り方を示す独自の設定を表現できます。
パフォーマンス設定は、接続時間の短さ、応答時間の速さ、および帯域幅の広さの相対的な重要度を示す 3 つの整数値によって記述されます。これらの整数の絶対値は重要ではありません。ある特定のプロトコルを選択するために、これらの値が単純に比較されますが、その際、値が大きければより強い設定を示します。たとえば、アプリケーションが応答時間の速さや帯域幅の広さよりも接続時間の短さを優先する場合には、値 (1, 0, 0) を指定してこのメソッドを呼び出すことができます。アプリケーションが応答時間の速さよりも帯域幅の広さを優先し、接続時間の短さよりも応答時間の速さを優先する場合には、値 (0, 1, 2) を指定してこのメソッドを呼び出すことができます。
このソケットのバインド後にこのメソッドを呼び出しても、何の効果もありません。つまり、この機能を使用するには、引数なしコンストラクタでソケットを作成する必要があります。
connectionTime
- 接続時間の短さの相対的な重要度を表す intlatency
- 応答時間の速さの相対的な重要度を表す intbandwidth
- 帯域幅の広さの相対的な重要度を表す int バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.