|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
java.lang.Object | +--java.net.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 |
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 - 使用するポート。空いているポートを使用する場合は 0backlog - キューの最大長
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()
nullpublic int getLocalPort()
public SocketAddress getLocalSocketAddress()
null を返します。
- 戻り値:
- このソケットのローカル端点を表す
SocketAddress。ソケットがまだバインドされていない場合は null - 導入されたバージョン:
- 1.4
- 関連項目:
getInetAddress(),
getLocalPort(),
bind(SocketAddress)
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)
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 メソッドが呼び出され、実際のソケットが作成されます。
セキュリティマネージャが存在する場合、このメソッドは最初にセキュリティマネージャの 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) を呼び出してこの値を変更することができます。ただし、アプリケーションで 64K バイトを超える受信ウィンドウを許可する場合は、RFC1323 に定義されているように、ローカルアドレスにバインドする前に推奨値を 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)
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.