|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.net.ServerSocket
public class ServerSocket
このクラスはサーバーソケットを実装します。サーバーソケットは、ネットワーク経由で要求が送られてくるのを待ちます。これは、その要求に基づいていくつかの操作を実行します。その後、場合によっては要求元に結果を返します。
サーバーソケットの実際の処理は、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 オプションの値を取得します。 |
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 |
コンストラクタの詳細 |
---|
public ServerSocket() throws IOException
IOException
- ソケットを開くときの入出力エラー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)
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)
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
セキュリティーマネージャーが存在する場合、このメソッドによってその checkListen
メソッドが port
引数をその引数として指定して呼び出され、この操作が許可されるかどうかが確認されます。この結果、SecurityException がスローされることがあります。
backlog
引数は、0 より大きい正の値である必要があります。渡された値が 0 以下の場合は、デフォルトの値が使用されます。
port
- ローカル TCP ポートbacklog
- 待機するバックログbindAddr
- サーバーをバインドするローカル InetAddress
SecurityException
- セキュリティーマネージャーが存在し、その checkListen
メソッドがこの操作を許可しない場合
IOException
- ソケットを開いているときに入出力エラーが発生した場合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
をスローします。
このソケットに関連するチャネルが存在する場合は、そのチャネルも閉じられます。
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
として返します。
Object
内の toString
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
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。