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() |
このソケットのバインド先の端点のアドレスを返します。
|
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()
ソケットが閉じられる前にバインドされていた場合、このメソッドはソケットが閉じられたあとも引き続きローカル・アドレスを返します。
セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャのcheckConnectメソッドがローカル・アドレスおよび-1を引数として呼び出され、操作が許可されるかどうかが確認されます。 この操作が許可されない場合は、ループバック・アドレスが返されます。
null。SecurityManager.checkConnect(java.lang.String, int)public int getLocalPort()
ソケットが閉じられる前にバインドされていた場合、このメソッドはソケットが閉じられたあとも引き続きポート番号を返します。
public SocketAddress getLocalSocketAddress()
ソケットが閉じられる前にバインドされていた場合、このメソッドはソケットが閉じられたあとも引き続き端点のアドレスを返します。
セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャのcheckConnectメソッドがローカル・アドレスおよび-1を引数として呼び出され、操作が許可されるかどうかが確認されます。 この操作が許可されない場合は、ループバック・アドレスを表すSocketAddressと、ソケットのバインド先であるローカル・ポートが返されます。
SocketAddress。セキュリティ・マネージャによって拒否された場合はループバック・アドレスを表すSocketAddress。ソケットがまだバインドされていない場合はnull。getInetAddress(), getLocalPort(), bind(SocketAddress), SecurityManager.checkConnect(java.lang.String, int)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、インタフェースCloseableclose、インタフェースAutoCloseableIOException - ソケットを閉じるときに入出力エラーが発生した場合。public ServerSocketChannel getChannel()
ServerSocketChannelオブジェクトを返します(存在する場合)。
チャネル自体がServerSocketChannel.openメソッドを使用して作成された場合にだけ、サーバー・ソケットにチャネルが存在します。
nullpublic boolean isBound()
public boolean isClosed()
public void setSoTimeout(int timeout)
throws SocketException
SO_TIMEOUTを有効または無効にします。 このオプションを0以外のタイム・アウトに設定すると、このServerSocketのaccept()呼出しが、その時間の間だけブロックされます。 タイム・アウトの期限が切れると、ServerSocketがまだ有効であってもjava.net.SocketTimeoutExceptionが発行されます。 このオプションは、ブロック処理に入る前に有効にしておく必要があります。 タイムアウトは0より大きい値を指定します。 タイム・アウト0は無限のタイム・アウトとして解釈されます。 timeout−ミリ秒で表される、指定されたタイム・アウトSocketException - 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。getSoTimeout()public int getSoTimeout()
throws IOException
SO_TIMEOUT.このオプションが無効(タイム・アウトが無限)の場合は0を返します。SO_TIMEOUT値IOException - 入出力エラーが発生した場合setSoTimeout(int)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_REUSEADDRソケット・オプションの有効化または無効化時にエラーが発生した場合、またはソケットがクローズされている場合。getReuseAddress(), bind(SocketAddress), isBound(), isClosed()public boolean getReuseAddress()
throws SocketException
SO_REUSEADDRが有効かどうかを調べます。SO_REUSEADDRが有効かどうかを示すboolean値。SocketException - 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。setReuseAddress(boolean)public String toString()
Stringとして返します。
セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャのcheckConnectメソッドがローカル・アドレスおよび-1を引数として呼び出され、操作が許可されるかどうかが確認されます。 この操作が許可されない場合は、ループバック・アドレスを表すInetAddressが実装アドレスとして返されます。
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
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または負の値である場合。getReceiveBufferSize()public int getReceiveBufferSize()
throws SocketException
ServerSocketで使われるSO_RCVBUFオプションの値を取得します。これは、このServerSocketから受け取るソケットに使用される推奨バッファ・サイズです。
受け入れたソケットに実際に設定された値は、Socket.getReceiveBufferSize()を呼び出して判定することに注意してください。
SocketのSO_RCVBUFオプションの値。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, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。