public class Socket extends Object implements Closeable
ソケットの実際の処理は、SocketImpl
クラスのインスタンスによって実行されます。アプリケーションは、ソケット実装を作成するソケット・ファクトリを変更することで、ローカル・ファイアウォールに適したソケットを作成するように自身を構成することができます。
setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketChannel
修飾子 | コンストラクタと説明 |
---|---|
|
Socket()
システムでデフォルトになっているタイプのSocketImplを使用して、接続されていないソケットを作成します。
|
|
Socket(InetAddress address, int port)
ストリーム・ソケットを作成し、指定されたIPアドレスの指定されたポート番号に接続します。
|
|
Socket(InetAddress host, int port, boolean stream)
非推奨。
UDP転送ではなくDatagramSocketを使ってください。
|
|
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
ソケットを作成し、指定されたリモート・ポート上の指定されたリモート・アドレスに接続します。
|
|
Socket(Proxy proxy)
接続されていないソケットを作成します。ほかの設定にかかわらず使用すべきプロキシ・タイプが存在する場合は、そのタイプを指定します。
|
protected |
Socket(SocketImpl impl)
ユーザーが指定したSocketImplを使用して、接続されていないソケットを作成します。
|
|
Socket(String host, int port)
ストリーム・ソケットを作成し、指定されたホスト上の指定されたポート番号に接続します。
|
|
Socket(String host, int port, boolean stream)
非推奨。
UDP転送ではなくDatagramSocketを使ってください。
|
|
Socket(String host, int port, InetAddress localAddr, int localPort)
ソケットを作成し、指定されたリモート・ポート上の指定されたリモート・ホストに接続します。
|
修飾子と型 | メソッドと説明 |
---|---|
void |
bind(SocketAddress bindpoint)
ソケットをローカル・アドレスにバインドします。
|
void |
close()
このソケットを閉じます。
|
void |
connect(SocketAddress endpoint)
このソケットをサーバーに接続します。
|
void |
connect(SocketAddress endpoint, int timeout)
指定されたタイム・アウト値を使って、このソケットをサーバーに接続します。
|
SocketChannel |
getChannel()
このソケットに関連付けられた一意の
SocketChannel オブジェクトを返します(存在する場合)。 |
InetAddress |
getInetAddress()
ソケットの接続先のアドレスを返します。
|
InputStream |
getInputStream()
このソケットの入力ストリームを返します。
|
boolean |
getKeepAlive()
SO_KEEPALIVE が有効かどうかを調べます。 |
InetAddress |
getLocalAddress()
ソケットのバインド先のローカル・アドレスを取得します。
|
int |
getLocalPort()
このソケットのバインド先のローカル・ポート番号を返します。
|
SocketAddress |
getLocalSocketAddress()
このソケットのバインド先の端点のアドレスを返します。
|
boolean |
getOOBInline()
SO_OOBINLINE が有効かどうかを調べます。 |
OutputStream |
getOutputStream()
このソケットの出力ストリームを返します。
|
int |
getPort()
このソケットの接続先のリモート・ポート番号を返します。
|
int |
getReceiveBufferSize()
|
SocketAddress |
getRemoteSocketAddress()
このソケットが接続されている端点のアドレスを返します。ソケットが接続されていない場合は
null を返します。 |
boolean |
getReuseAddress()
SO_REUSEADDR が有効かどうかを調べます。 |
int |
getSendBufferSize()
|
int |
getSoLinger()
SO_LINGER の設定を返します。 |
int |
getSoTimeout()
SO_TIMEOUT の設定を返します。 |
boolean |
getTcpNoDelay()
TCP_NODELAY が有効かどうかを調べます。 |
int |
getTrafficClass()
このソケットから送信されるパケットのIPヘッダーのトラフィック・クラスまたはサービス・タイプを取得します。
|
boolean |
isBound()
ソケットのバインディング状態を返します。
|
boolean |
isClosed()
ソケットの閉じた状態を返します。
|
boolean |
isConnected()
ソケットの接続状態を返します。
|
boolean |
isInputShutdown()
ソケット接続の読込み側の半分が閉じているかどうかを返します。
|
boolean |
isOutputShutdown()
ソケット接続の書込み側の半分が閉じているかどうかを返します。
|
void |
sendUrgentData(int data)
このソケット上で1バイトの緊急データを送信します。
|
void |
setKeepAlive(boolean on)
SO_KEEPALIVE を有効または無効にします。 |
void |
setOOBInline(boolean on)
SO_OOBINLINE (TCP緊急データの受信)を有効または無効にします。デフォルトではこのオプションは無効になっており、ソケット上で受信されたTCP緊急データは何の通知もなく破棄されます。 |
void |
setPerformancePreferences(int connectionTime, int latency, int bandwidth)
このソケットのパフォーマンス設定を行います。
|
void |
setReceiveBufferSize(int size)
この
Socket のSO_RCVBUF オプションを指定された値に設定します。 |
void |
setReuseAddress(boolean on)
SO_REUSEADDR ソケット・オプションを有効または無効にします。 |
void |
setSendBufferSize(int size)
この
Socket のSO_SNDBUF オプションを指定された値に設定します。 |
static void |
setSocketImplFactory(SocketImplFactory fac)
アプリケーションのクライアント・ソケット実装ファクトリを設定します。
|
void |
setSoLinger(boolean on, int linger)
指定された遅延時間(秒)を使って
SO_LINGER を有効または無効にします。 |
void |
setSoTimeout(int timeout)
指定されたタイムアウト(ミリ秒)を使って
SO_TIMEOUT を有効または無効にします。 |
void |
setTcpNoDelay(boolean on)
TCP_NODELAY を有効または無効にします(Nagleのアルゴリズムの有効、無効の切り替え)。 |
void |
setTrafficClass(int tc)
このソケットから送信されるパケットのIPヘッダーのトラフィック・クラスまたはサービス・タイプのオクテットを設定します。
|
void |
shutdownInput()
このソケットの入力ストリームを「ストリームの終わり」に設定します。
|
void |
shutdownOutput()
このソケットの出力ストリームを無効にします。
|
String |
toString()
このソケットを
String に変換します。 |
public Socket()
public Socket(Proxy proxy)
セキュリティ・マネージャが存在する場合、そのcheckConnect
メソッドが、プロキシのホスト・アドレスとポート番号を引数に指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
例
Socket s = new Socket(Proxy.NO_PROXY);
は、ほかのプロキシ構成を無視してプレーンなソケットを作成します。Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080)));
は、指定されたSOCKSプロキシ・サーバー経由で接続するソケットを作成します。proxy
- どのような種類のプロキシ処理を使用すべきかを指定したProxy
オブジェクト。IllegalArgumentException
−プロキシの型が無効な場合、またはプロキシがnull
の場合。SecurityException
−セキュリティ・マネージャが存在し、プロキシに接続する権限が拒否された場合。ProxySelector
、Proxy
protected Socket(SocketImpl impl) throws SocketException
impl
- サブクラスがSocket上で使用するSocketImplのインスタンス。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。public Socket(String host, int port) throws UnknownHostException, IOException
指定されたホストがnull
の場合、アドレスをInetAddress.getByName
(null)
と指定するのと同じです。つまり、それは、ループバック・インタフェースのアドレスを指定するのと等価になります。
アプリケーションでサーバー・ソケット・ファクトリを指定している場合は、そのファクトリのcreateSocketImpl
メソッドが呼び出され、実際のソケットが作成されます。そうでない場合は「プレーンな」ソケットが作成されます。
セキュリティ・マネージャが存在する場合、そのcheckConnect
メソッドが、ホスト・アドレスとport
を引数に指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
host
- ホスト名。ループバック・アドレスの場合はnull
。port
- ポート番号。UnknownHostException
−ホストのIPアドレスを決定できなかった場合。IOException
- ソケットの生成中に入出力エラーが発生した場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketImplFactory.createSocketImpl()
, SecurityManager.checkConnect(java.lang.String, int)
public Socket(InetAddress address, int port) throws IOException
アプリケーションでソケット・ファクトリを指定している場合は、そのファクトリのcreateSocketImpl
メソッドが呼び出され、実際のソケットが作成されます。そうでない場合は「プレーンな」ソケットが作成されます。
セキュリティ・マネージャが存在する場合、そのcheckConnect
メソッドが、ホスト・アドレスとport
を引数に指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
address
- IPアドレス。port
- ポート番号。IOException
- ソケットの生成中に入出力エラーが発生した場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。NullPointerException
- address
がnullである場合。setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketImplFactory.createSocketImpl()
, SecurityManager.checkConnect(java.lang.String, int)
public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException
指定されたホストがnull
の場合、アドレスをInetAddress.getByName
(null)
と指定するのと同じです。つまり、それは、ループバック・インタフェースのアドレスを指定するのと等価になります。
ポート番号がzero
の場合は、bind
操作で一時的なポートが選択されます。
セキュリティ・マネージャが存在する場合、そのcheckConnect
メソッドが、ホスト・アドレスとport
を引数に指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
host
−リモート・ホストの名前。ループバック・アドレスの場合はnull
。port
- リモート・ポートlocalAddr
- ソケットのバインド先のローカル・アドレス、またはanyLocal
アドレスの場合はnull
。localPort
- ソケットのバインド先のローカル・ポート、またはシステムで選択された空いているポートの場合はzero
。IOException
- ソケットの生成中に入出力エラーが発生した場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドが接続先への接続を許可しないか、そのcheckListen
メソッドがローカル・ポートへのバインドを許可しない場合。IllegalArgumentException
- portパラメータまたはlocalPortパラメータが指定された有効なポート値の範囲(0から65535)外である場合。SecurityManager.checkConnect(java.lang.String, int)
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
指定されたローカル・アドレスがnull
の場合、アドレスをAnyLocalアドレスと指定するのと同じです(InetAddress.isAnyLocalAddress
()
を参照)。
ポート番号がzero
の場合は、bind
操作で一時的なポートが選択されます。
セキュリティ・マネージャが存在する場合、そのcheckConnect
メソッドが、ホスト・アドレスとport
を引数に指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
address
−リモート・アドレスport
- リモート・ポートlocalAddr
- ソケットのバインド先のローカル・アドレス、またはanyLocal
アドレスの場合はnull
。localPort
- ソケットのバインド先のローカル・ポート、またはシステムで選択された空いているポートの場合はzero
。IOException
- ソケットの生成中に入出力エラーが発生した場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドが接続先への接続を許可しないか、そのcheckListen
メソッドがローカル・ポートへのバインドを許可しない場合。IllegalArgumentException
- portパラメータまたはlocalPortパラメータが指定された有効なポート値の範囲(0から65535)外である場合。NullPointerException
- address
がnullである場合。SecurityManager.checkConnect(java.lang.String, int)
@Deprecated public Socket(String host, int port, boolean stream) throws IOException
指定されたホストがnull
の場合、アドレスをInetAddress.getByName
(null)
と指定するのと同じです。つまり、それは、ループバック・インタフェースのアドレスを指定するのと等価になります。
stream引数がtrue
の場合、これはストリーム・ソケットを作成します。stream引数がfalse
の場合、これはデータグラム・ソケットを作成します。
アプリケーションでサーバー・ソケット・ファクトリを指定している場合は、そのファクトリのcreateSocketImpl
メソッドが呼び出され、実際のソケットが作成されます。そうでない場合は「プレーンな」ソケットが作成されます。
セキュリティ・マネージャが存在する場合、そのcheckConnect
メソッドが、ホスト・アドレスとport
を引数に指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
UDPソケットを使用する場合、TCP/IPに関連するソケット・オプションは適用されません。
host
- ホスト名。ループバック・アドレスの場合はnull
。port
- ポート番号。stream
−これがストリーム・ソケットとデータグラム・ソケットのどちらであるかを示すboolean
。IOException
- ソケットの生成中に入出力エラーが発生した場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketImplFactory.createSocketImpl()
, SecurityManager.checkConnect(java.lang.String, int)
@Deprecated public Socket(InetAddress host, int port, boolean stream) throws IOException
stream引数がtrue
の場合、これはストリーム・ソケットを作成します。stream引数がfalse
の場合、これはデータグラム・ソケットを作成します。
アプリケーションでサーバー・ソケット・ファクトリを指定している場合は、そのファクトリのcreateSocketImpl
メソッドが呼び出され、実際のソケットが作成されます。そうでない場合は「プレーンな」ソケットが作成されます。
セキュリティ・マネージャが存在する場合は、checkConnect
メソッドがhost.getHostAddress()
とport
をその引数に指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
UDPソケットを使用する場合、TCP/IPに関連するソケット・オプションは適用されません。
host
- IPアドレス。port
- ポート番号。stream
- true
の場合はストリーム・ソケットを作成し、それ以外の場合はデータグラム・ソケットを作成します。IOException
- ソケットの生成中に入出力エラーが発生した場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckConnect
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。NullPointerException
- host
がnullである場合。setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketImplFactory.createSocketImpl()
, SecurityManager.checkConnect(java.lang.String, int)
public void connect(SocketAddress endpoint) throws IOException
endpoint
- SocketAddress
IOException
- 接続時にエラーが発生した場合IllegalBlockingModeException
- このソケットに関連するチャネルが存在し、そのチャネルが非ブロック・モードである場合。IllegalArgumentException
- 端点がnullであるか、このソケットによってサポートされていないSocketAddressサブクラスである場合public void connect(SocketAddress endpoint, int timeout) throws IOException
endpoint
- SocketAddress
timeout
−使用するタイム・アウト値(ミリ秒)。IOException
- 接続時にエラーが発生した場合SocketTimeoutException
−接続する前にタイム・アウトが過ぎた場合IllegalBlockingModeException
- このソケットに関連するチャネルが存在し、そのチャネルが非ブロック・モードである場合。IllegalArgumentException
- 端点がnullであるか、このソケットによってサポートされていないSocketAddressサブクラスである場合public void bind(SocketAddress bindpoint) throws IOException
アドレスがnull
の場合は、システムにより一時的なポートと有効なローカル・アドレスが選択されてソケットがバインドされます。
bindpoint
- バインド先のSocketAddress
IOException
- バインド操作に失敗した場合、あるいはソケットがすでにバインドされている場合。IllegalArgumentException
- bindpointが、このソケットによってサポートされていないSocketAddressサブクラスである場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckListen
メソッドがローカル・ポートへのバインドを許可しない場合。isBound()
public InetAddress getInetAddress()
ソケットが閉じられる
前に接続されていた場合は、このメソッドはソケットが閉じられたあとも引き続き接続先アドレスを返します。
null
。public InetAddress getLocalAddress()
セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャのcheckConnect
メソッドがローカル・アドレスおよび-1
を引数として呼び出され、操作が許可されるかどうかが確認されます。この操作が許可されない場合は、ループバック
・アドレスが返されます。
SecurityManager.checkConnect(java.lang.String, int)
public int getPort()
ソケットが閉じられる
前に接続されていた場合は、このメソッドはソケットが閉じられたあとも引き続き接続先ポート番号を返します。
public int getLocalPort()
ソケットが閉じられる
前に接続されていた場合、このメソッドはソケットが閉じられたあとも引き続きローカル・ポート番号を返します。
public SocketAddress getRemoteSocketAddress()
null
を返します。
ソケットが閉じられる
前に接続されていた場合は、このメソッドはソケットが閉じられたあとも引き続き接続先アドレスを返します。
SocketAddress
。ソケットがまだ接続されていない場合はnull
。getInetAddress()
, getPort()
, connect(SocketAddress, int)
, connect(SocketAddress)
public SocketAddress getLocalSocketAddress()
InetSocketAddress
が表す端点にバインドされているソケットが閉じられている
場合、このメソッドはソケットが閉じられたあともInetSocketAddress
を返します。その場合、返されたInetSocketAddress
のアドレスはワイルドカード
アドレスで、そのポートはバインド先のローカル・ポートです。
セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャのcheckConnect
メソッドがローカル・アドレスおよび-1
を引数として呼び出され、操作が許可されるかどうかが確認されます。この操作が許可されない場合は、ループバック
・アドレスを表すSocketAddress
と、このソケットのバインド先であるローカル・ポートが返されます。
SocketAddress
。セキュリティ・マネージャによって拒否された場合はループバック・アドレスを表すSocketAddress
。ソケットがまだバインドされていない場合はnull
。getLocalAddress()
, getLocalPort()
, bind(SocketAddress)
, SecurityManager.checkConnect(java.lang.String, int)
public SocketChannel getChannel()
SocketChannel
オブジェクトを返します(存在する場合)。
チャネル自体がSocketChannel.open
メソッドまたはServerSocketChannel.accept
メソッドを使用して作成された場合にだけ、ソケットにチャネルが存在します。
null
public InputStream getInputStream() throws IOException
このソケットにチャネルが関連付けられている場合、結果として得られる入力ストリームは、その操作のすべてをチャネルに委譲します。そのチャネルが非ブロック・モードである場合、入力ストリームのread
操作がIllegalBlockingModeException
をスローします。
異常な状況下では、リモート・ホストやネットワーク・ソフトウェアによって使用している接続が解除される可能性があります(TCP接続の場合であれば接続がリセットされるなど)。接続の解除がネットワーク・ソフトウェアによって検出された場合、返された入力ストリームに対して次のことが当てはまります。
ネットワーク・ソフトウェアがソケットによってバッファリングされたバイトを破棄する可能性がある。ネットワーク・ソフトウェアによって破棄されていないバイトは、read
を使って読み取ることができる。
ソケットでバッファリングされたバイトがない場合、またはバッファリングされたすべてのバイトがread
によって消費された場合、以降のread
への呼出しはすべて、IOException
をスローします。
ソケットでバッファリングされたバイトがなく、ソケットがclose
を使用して閉じられていない場合、available
は0
を返します。
返されたInputStream
をクローズすると、関連付けられたソケットがクローズします。
IOException
−入力ストリームの作成時に入出力エラーが発生した場合、ソケットがクローズされている場合、ソケットが接続されていない場合、またはshutdownInput()
を使ってソケットの入力がシャットダウンされた場合public OutputStream getOutputStream() throws IOException
このソケットにチャネルが関連付けられている場合、結果として得られる出力ストリームは、その操作のすべてをチャネルに委譲します。そのチャネルが非ブロック・モードである場合、出力ストリームのwrite
操作がIllegalBlockingModeException
をスローします。
返されたOutputStream
をクローズすると、関連付けられたソケットがクローズします。
IOException
−出力ストリームの作成中に入出力エラーが発生した場合、またはソケットが接続されていない場合。public void setTcpNoDelay(boolean on) throws SocketException
TCP_NODELAY
を有効または無効にします(Nagleのアルゴリズムの有効、無効の切り替え)。on
−TCP_NODELAYを有効にする場合はtrue
、無効にする場合はfalse
。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。getTcpNoDelay()
public boolean getTcpNoDelay() throws SocketException
TCP_NODELAY
が有効かどうかを調べます。TCP_NODELAY
が有効かどうかを示すboolean
値。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。setTcpNoDelay(boolean)
public void setSoLinger(boolean on, int linger) throws SocketException
SO_LINGER
を有効または無効にします。タイム・アウトの最大値はプラットフォームに固有です。設定はソケットを閉じる場合にだけ影響します。on
−遅延時間を有効にするかどうかを指定。linger
−onがtrueの場合は、遅延時間。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。IllegalArgumentException
−遅延時間の値が負の数値である場合。getSoLinger()
public int getSoLinger() throws SocketException
SO_LINGER
.戻り値 -1は、このオプションが無効になっていることを意味します。設定はソケットを閉じる場合にだけ影響します。SO_LINGER
の設定。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。setSoLinger(boolean, int)
public void sendUrgentData(int data) throws IOException
data
- 送信するデータのバイトIOException
- データ送信時にエラーが発生した場合。public void setOOBInline(boolean on) throws SocketException
SO_OOBINLINE
(TCP緊急データの受信)を有効または無効にします。デフォルトではこのオプションは無効になっており、ソケット上で受信されたTCP緊急データは何の通知もなく破棄されます。ユーザーが緊急データの受信を望んでいる場合は、このオプションを有効にしてください。有効にした場合、緊急データは通常データとともにインラインで受信されます。
受信緊急データの処理に関しては、限られたサポートしか提供されていないことに注意してください。特に、高位レベルのプロトコルが提供されていない場合、受信する緊急データの通知は提供されず、通常データと緊急データを区別する機能はありません。
on
- SO_OOBINLINE
を有効にする場合はtrue
、無効にする場合はfalse
。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。getOOBInline()
public boolean getOOBInline() throws SocketException
SO_OOBINLINE
が有効かどうかを調べます。SO_OOBINLINE
が有効かどうかを示すboolean
値。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。setOOBInline(boolean)
public void setSoTimeout(int timeout) throws SocketException
SO_TIMEOUT
を有効または無効にします。このオプションを0以外のタイム・アウトに設定すると、このSocketに関連付けられたInputStreamのread()呼出しが、その時間の間だけブロックされます。タイム・アウトの期限が切れると、Socketがまだ有効であってもjava.net.SocketTimeoutExceptionが発行されます。このオプションは、ブロック処理に入る前に有効にしておく必要があります。タイムアウトは0
より大きい値を指定します。タイム・アウト0は無限のタイム・アウトとして解釈されます。timeout
- ミリ秒で表される、指定されたタイム・アウト。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。getSoTimeout()
public int getSoTimeout() throws SocketException
SO_TIMEOUT
.このオプションが無効(タイム・アウトが無限)の場合は0を返します。SO_TIMEOUT
の設定SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。setSoTimeout(int)
public void setSendBufferSize(int size) throws SocketException
Socket
のSO_SNDBUF
オプションを指定された値に設定します。SO_SNDBUF
オプションは、使用するネットワーク入出力バッファに設定するサイズのヒントとして、プラットフォームのネットワーク・コードが使います。
SO_SNDBUF
はヒントなので、アプリケーションでバッファのサイズ設定を検証する必要がある場合は、getSendBufferSize()
を呼び出してください。
size
- 送信バッファ・サイズの設定サイズ。この値は0より大きくなければならない。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。IllegalArgumentException
- 値が0または負の値である場合。getSendBufferSize()
public int getSendBufferSize() throws SocketException
Socket
のSO_SNDBUF
オプションの値。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。setSendBufferSize(int)
public void setReceiveBufferSize(int size) throws SocketException
Socket
のSO_RCVBUF
オプションを指定された値に設定します。SO_RCVBUF
オプションは、使用するネットワーク入出力バッファに設定するサイズのヒントとして、プラットフォームのネットワーク・コードが使います。
受信バッファのサイズを増やすと、大規模な接続でのネットワーク入出力のパフォーマンスを上げることができます。一方、サイズを減らすと、受信データのバックログを減らすことができます。
SO_RCVBUF
はヒントなので、アプリケーションでバッファのサイズ設定を検証する必要がある場合は、getReceiveBufferSize()
を呼び出してください。
SO_RCVBUF
の値は、リモート・ピアに通知されるTCP受信ウィンドウの設定にも使用されます。一般に、ソケットが接続されているかぎり、このウィンドウ・サイズはいつでも変更できます。ただし、64Kを超える受信ウィンドウを要求する場合は、ソケットをリモート・ピアに接続する前に変更を要求する必要があります。次の2つの場合に注意してください。
ServerSocket.setReceiveBufferSize(int)
を呼び出してこれを実行する必要があります。size
- 受信バッファ・サイズの設定サイズ。この値は0より大きくなければならない。IllegalArgumentException
- 値が0または負の値である場合。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。getReceiveBufferSize()
, ServerSocket.setReceiveBufferSize(int)
public int getReceiveBufferSize() throws SocketException
Socket
のSO_RCVBUF
オプションの値。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。setReceiveBufferSize(int)
public void setKeepAlive(boolean on) throws SocketException
SO_KEEPALIVE
を有効または無効にします。on
−ソケットをオンのままにしておくかどうかを指定。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。getKeepAlive()
public boolean getKeepAlive() throws SocketException
SO_KEEPALIVE
が有効かどうかを調べます。SO_KEEPALIVE
が有効かどうかを示すboolean
値。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。setKeepAlive(boolean)
public void setTrafficClass(int tc) throws SocketException
tcの範囲は0 <= tc <= 255
でなければいけません。そうでない場合は、IllegalArgumentExceptionがスローされます。
注:
IP (Internet Protocol)バージョン4の場合、この値はinteger
で構成され、最下位8ビットが、ソケットによって送信されたIPパケットのTOSオクテットの値を表します。RFC 1349ではTOSの値は次のように定義されています。
IPTOS_LOWCOST (0x02)
IPTOS_RELIABILITY (0x04)
IPTOS_THROUGHPUT (0x08)
IPTOS_LOWDELAY (0x10)
優先フィールドにビットを設定すると、操作が許可されないことを示すSocketExceptionになることがあります。
RFC 1122のセクション4.2.4.2に示されているように、準拠したTCP実装は、接続の寿命がある間はアプリケーションがTOSフィールドを変更できるようにすべきです(ただし、必ずしもそうする必要はない)。したがって、TCP接続の確立後にサービス・タイプ・フィールドを変更できるかどうかは、使用するプラットフォーム内の実装によって決まります。アプリケーションは、接続後にTOSフィールドを変更できると仮定すべきではありません。
IP (Internet Protocol) Version 6の場合、tc
はIPヘッダーのsin6_flowinfoフィールドに格納される値です。
tc
- ビット・セットのint
値。SocketException
- トラフィック・クラスまたはサービス・タイプの設定時にエラーが発生した場合getTrafficClass()
, SocketOptions.IP_TOS
public int getTrafficClass() throws SocketException
使用するネットワーク実装が、setTrafficClass(int)
を使用して設定されたトラフィック・クラスまたはサービス型を無視することがあるので、このSocketでsetTrafficClass(int)
メソッドを使用して以前に設定された値とは異なる値がこのメソッドから返されることがあります。
SocketException
- トラフィック・クラスまたはサービス・タイプの値を取得する際にエラーが発生した場合。setTrafficClass(int)
, SocketOptions.IP_TOS
public void setReuseAddress(boolean on) throws SocketException
SO_REUSEADDR
ソケット・オプションを有効または無効にします。
TCP接続をクローズする場合、接続クローズ後の一定期間、その接続がタイム・アウト状態(通常、TIME_WAIT
状態または2MSL
待機状態と呼ばれる)にとどまる可能性があります。既知のソケット・アドレスまたはポートを使用するアプリケーションの場合、ソケット・アドレスまたはポートに関連する接続がタイム・アウト状態にあると、ソケットを必要なSocketAddress
にバインドできないことがあります。
bind(SocketAddress)
を使用してソケットをバインドする前にSO_REUSEADDR
を有効にすると、以前の接続がタイムアウト状態でもソケットをバインドできます。
Socket
が作成されると、SO_REUSEADDR
の初期設定は無効になります。
ソケットがバインドされた(isBound()
を参照)後でSO_REUSEADDR
を有効または無効にする場合の動作は定義されていません。
on
- ソケット・オプションを有効にするか無効にするかを指定SocketException
- SO_REUSEADDR
ソケット・オプションの有効化または無効化時にエラーが発生した場合、またはソケットがクローズされている場合。getReuseAddress()
, bind(SocketAddress)
, isClosed()
, isBound()
public boolean getReuseAddress() throws SocketException
SO_REUSEADDR
が有効かどうかを調べます。SO_REUSEADDR
が有効かどうかを示すboolean
値。SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。setReuseAddress(boolean)
public void close() throws IOException
このソケットの入出力操作で現在ブロックされているすべてのスレッドがSocketException
をスローします。
ソケットが閉じられると、その後のネットワークにそのソケットを使用することはできません(つまり、再接続または再バインドはできない)。新しいソケットを作成する必要があります。
このソケットをクローズすると、このソケットのInputStream
とOutputStream
もクローズされます。
このソケットに関連するチャネルが存在する場合は、そのチャネルも閉じられます。
close
、インタフェース: Closeable
close
、インタフェース: AutoCloseable
IOException
- このソケットを閉じるときに入出力エラーが発生した場合。isClosed()
public void shutdownInput() throws IOException
ソケットでこのメソッドを呼び出した後にソケットの入力ストリームから読み込むと、ストリームのavailable
メソッドは0を返し、read
メソッドは-1
(ストリームの終わり)を返します。
IOException
- このソケットを停止するときに入出力エラーが発生した場合。shutdownOutput()
, close()
, setSoLinger(boolean, int)
, isInputShutdown()
public void shutdownOutput() throws IOException
IOException
- このソケットを停止するときに入出力エラーが発生した場合。shutdownInput()
, close()
, setSoLinger(boolean, int)
, isOutputShutdown()
public String toString()
String
に変換します。public boolean isConnected()
注: ソケットを閉じても接続状態はクリアされません。つまりこのメソッドは、閉じられる前にソケットが正常に接続されていた場合、閉じられたソケット(isClosed()
を参照)にはtrue
を返します。
public boolean isBound()
注: ソケットを閉じてもバインディング状態はクリアされません。つまりこのメソッドは、閉じられる前にソケットが正常にバインドされていた場合、閉じられたソケット(isClosed()
を参照)にはtrue
を返します。
bind(java.net.SocketAddress)
public boolean isClosed()
close()
public boolean isInputShutdown()
shutdownInput()
public boolean isOutputShutdown()
shutdownOutput()
public static void setSocketImplFactory(SocketImplFactory fac) throws IOException
アプリケーションで新しいクライアント・ソケットを作成すると、ソケット実装ファクトリのcreateSocketImpl
メソッドが呼び出され、実際のソケットが作成されます。
このメソッドにnull
を渡しても、ファクトリがすでに設定されていないかぎり、それは無操作になります。
セキュリティ・マネージャが存在する場合、この操作が許可されるように、このメソッドは最初にセキュリティ・マネージャのcheckSetFactory
メソッドを呼び出します。この結果、SecurityExceptionがスローされることがあります。
fac
- 目的のファクトリ。IOException
- ソケット・ファクトリの設定中に入出力エラーが発生した場合。SocketException
- ファクトリがすでに定義されている場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckSetFactory
メソッドでこの操作が許可されていない場合。SocketImplFactory.createSocketImpl()
, SecurityManager.checkSetFactory()
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
ソケットはデフォルトで、TCP/IPプロトコルを使用します。実装によっては、TCP/IPとは異なるパフォーマンス特性を持つ代替プロトコルを提供することもあります。アプリケーションは、このメソッドを使用することで、実装で利用可能なプロトコルの選択時に、これらのかね合いの取り方を示す独自の設定を表現できます。
パフォーマンス設定は、接続時間の短さ、応答時間の速さ、および帯域幅の広さの相対的な重要度を示す3つの整数値によって記述されます。これらの整数の絶対値は重要ではありません。ある特定のプロトコルを選択するために、これらの値が単純に比較されますが、その際、値が大きければより強い設定を示します。負の値は正の値よりも低い優先順位を表します。たとえば、アプリケーションが応答時間の速さや帯域幅の広さよりも接続時間の短さを優先する場合には、値(1, 0, 0)
を指定してこのメソッドを呼び出すことができます。アプリケーションが応答時間の速さよりも帯域幅の広さを優先し、接続時間の短さよりも応答時間の速さを優先する場合には、値(0, 1, 2)
を指定してこのメソッドを呼び出すことができます。
このソケットの接続後にこのメソッドを呼び出しても、何の効果もありません。
connectionTime
- 接続時間の短さの相対的な重要度を表すint
latency
- 応答時間の速さの相対的な重要度を表すint
bandwidth
- 帯域幅の広さの相対的な重要度を表すint
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.