public class ServerSocket extends Object implements Closeable
服务器套接字的实际工作由SocketImpl
类的一个实例进行。一个应用程序可以更改创建套接字实现的套接字工厂,以配置自己创建适合本地防火墙的套接字。
SocketImpl
,
setSocketFactory(java.net.SocketImplFactory)
,
ServerSocketChannel
Constructor and Description |
---|
ServerSocket()
创建一个绑定服务器套接字。
|
ServerSocket(int port)
创建一个服务器套接字,绑定到指定的端口。
|
ServerSocket(int port, int backlog)
创建一个服务器套接字,并将其绑定到指定的本地端口号,并使用指定的积压。
|
ServerSocket(int port, int backlog, InetAddress bindAddr)
用指定的端口创建一个服务器,听积压,和本地IP地址绑定到。
|
Modifier and Type | Method and Description |
---|---|
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()
|
boolean |
getReuseAddress()
如果
SO_REUSEADDR 启用。
|
int |
getSoTimeout()
检索设置
SO_TIMEOUT 。
|
protected void |
implAccept(Socket s)
子类使用此方法重载ServerSocket()返回自己的子类的插座。
|
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
- IO错误当打开套接字。
public ServerSocket(int port) throws IOException
0
意味着端口号会自动分配一个端口号,通常是从一个临时端口范围。那么这个端口号可以通过调用
getLocalPort
检索。
传入的连接标志的最大队列长度(连接请求)是集50
。如果一个连接指示到达队列已满时,连接被拒绝。
如果应用程序已指定服务器套接字工厂,那个工厂的createSocketImpl
方法来创建实际的套接字实现。否则创建一个“普通”套接字。
如果存在安全管理器,它的checkListen
方法称为确保操作的参数是允许的port
论点。这可能导致SecurityException。
port
-端口号,或
0
使用端口号是自动分配。
IOException
如果I/O错误当打开套接字时发生。
SecurityException
-如果存在一个安全管理及其
checkListen
方法不允许操作。
IllegalArgumentException
如果端口外部端口的值指定的范围内,这是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
如果I/O错误当打开套接字时发生。
SecurityException
-如果存在一个安全管理及其
checkListen
方法不允许操作。
IllegalArgumentException
如果端口外部端口的值指定的范围内,这是0和65535之间,包容。
SocketImpl
,
SocketImplFactory.createSocketImpl()
,
setSocketFactory(java.net.SocketImplFactory)
,
SecurityManager.checkListen(int)
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
0
意味着端口号会自动分配一个端口号,通常是从一个临时端口范围。那么这个端口号可以通过调用
getLocalPort
检索。
如果存在安全管理器,这种方法称为确保操作的参数是允许的port
论证其checkListen
方法。这可能导致SecurityException。的backlog
参数是请求的最大数量的挂起连接在插座上。它的确切的语义是实现特定的。特别是,一个实现可以处以最大长度或可以选择忽略参数的根。所提供的值应大于0
。如果是小于或等于0
,然后具体实现将使用默认。
port
-端口号,或
0
使用端口号是自动分配。
backlog
请求的最大长度的传入连接队列。
bindAddr
-本地服务器将绑定到它
SecurityException
-如果存在一个安全管理及其
checkListen
方法不允许操作。
IOException
如果I/O错误当打开套接字时发生。
IllegalArgumentException
如果端口外部端口的值指定的范围内,这是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()
如果插座会被closed
之前,那么这个方法之后会继续关闭套接字返回本地地址。
如果存在安全管理器,它的checkConnect
方法被调用的本地地址和-1
作为它的参数看看操作是允许的。如果操作是不允许的,loopback
返回的地址。
null
如果套接字绑定。
SecurityManager.checkConnect(java.lang.String, int)
public int getLocalPort()
如果插座会被closed
之前,本方法将继续在套接字关闭返回的端口号。
public SocketAddress getLocalSocketAddress()
如果插座会被closed
之前,本方法将继续在套接字关闭返回的端点地址。
如果存在安全管理器,它的checkConnect
方法被调用的本地地址和-1
作为它的参数看看操作是允许的。如果操作是不允许的,一个SocketAddress
代表loopback
地址和本地端口,socket返回。
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
如果I/O等待连接时发生错误。
SecurityException
-如果存在一个安全管理及其
checkAccept
方法不允许操作。
SocketTimeoutException
如果超时之前设置setsotimeout和超时已达到。
IllegalBlockingModeException
-如果这插座都有一个相关的信道,信道是非阻塞模式,并且没有连接好的被接受
SecurityManager.checkAccept(java.lang.String, int)
protected final void implAccept(Socket s) throws IOException
s
-插座
IllegalBlockingModeException
-如果这插座有对应的通道和通道处于非阻塞模式
IOException
如果I/O等待连接时发生错误。
public void close() throws IOException
close
接口
Closeable
close
接口
AutoCloseable
IOException
-如果一个I / O错误关闭套接字时。
public ServerSocketChannel getChannel()
ServerSocketChannel
对象,如果任何。
服务器套接字将有一个通道,如果,如果,渠道本身是通过创建ServerSocketChannel.open
方法。
null
如果这个插座不是一个通道
public boolean isBound()
public boolean isClosed()
public void setSoTimeout(int timeout) throws SocketException
SO_TIMEOUT
以指定的超时时间,以毫秒为单位。这个选项设置为非零超时,一个叫()这个ServerSocket将只有这个时间块。如果超时时间已到,一
java.net.sockettimeoutexception抬起,尽管ServerSocket仍然有效。选择
必须可以进入阻塞操作有影响之前。超时值必须
> 0
。一个零的超时被解释为一个无限超时。
timeout
-指定的超时时间,以毫秒为单位
SocketException
-如果在底层协议有错误,例如TCP错误。
getSoTimeout()
public int getSoTimeout() throws IOException
SO_TIMEOUT
。0返回意味着该选项被禁用(即,超时的无穷大)。
SO_TIMEOUT
价值
IOException
如果I/O错误发生
setSoTimeout(int)
public void setReuseAddress(boolean on) throws SocketException
SO_REUSEADDR
套接字选项。
当一个TCP连接被关闭的连接可能处于超时状态一段时间后,连接被关闭(通常称为TIME_WAIT
2MSL
状态或等待状态)。使用一个众所周知的套接字地址或端口可能无法将套接字绑定到所需的SocketAddress
如果有连接超时状态涉及socket地址或端口的应用。
使SO_REUSEADDR
结合使用bind(SocketAddress)
插座允许将套接字绑定即使以前的连接在超时之前的状态。
当一个ServerSocket
建立SO_REUSEADDR
初始设置不明确。应用程序可以使用getReuseAddress()
确定SO_REUSEADDR
初始设置。
行为时,SO_REUSEADDR
启用或禁用后一个套接字绑定(见isBound()
)没有定义。
on
-是否启用或禁用套接字选项
SocketException
-如果出现错误启用或禁用的
SO_REUSEADDR
套接字选项,或关闭套接字。
getReuseAddress()
,
bind(SocketAddress)
,
isBound()
,
isClosed()
public boolean getReuseAddress() throws SocketException
SO_REUSEADDR
启用。
boolean
指示是否启用
SO_REUSEADDR
。
SocketException
-如果在底层协议有错误,例如TCP错误。
setReuseAddress(boolean)
public String toString()
String
实现的地址与端口。
如果存在安全管理器,它的checkConnect
方法被调用的本地地址和-1
作为它的参数看看操作是允许的。如果操作是不允许的,代表loopback
地址InetAddress
是作为实现返回的地址。
public static void setSocketFactory(SocketImplFactory fac) throws IOException
当一个应用程序创建一个新的服务器套接字,该套接字实现工厂的createSocketImpl
方法来创建实际的套接字实现。
通过null
的方法是一种无OP除非厂家已经设置。
如果存在安全管理器,该方法首先调用安全管理器的checkSetFactory
方法确保操作是允许的。这可能导致SecurityException。
fac
-所需的工厂。
IOException
-如果一个I / O错误设置套接字工厂时。
SocketException
-如果工厂已被定义。
SecurityException
-如果存在一个安全管理及其
checkSetFactory
方法不允许操作。
SocketImplFactory.createSocketImpl()
,
SecurityManager.checkSetFactory()
public void setReceiveBufferSize(int size) throws SocketException
ServerSocket
插座
SO_RCVBUF
选项。其实在接受套接字的价值必须通过在socket返回调用
Socket.getReceiveBufferSize()
确定
accept()
。
对SO_RCVBUF
值是用来设置内部套接字接收缓冲区的大小,并设置TCP接收窗口的大小,这样的远程对等。
这是有可能改变的值,随后,通过调用Socket.setReceiveBufferSize(int)
。然而,如果应用程序希望允许接收窗口大于64K字节,定义由RFC1323将该值必须设置在ServerSocket 之前它绑定到一个本地地址。这意味着,ServerSocket必须用无参数的构造函数创建的,然后setreceivebuffersize()必须被称为最后的支持是通过调用()绑定到一个地址。
不这样做不会造成错误,和缓冲区的大小可以设置为请求的值,但在接受这个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不同的性能特点。这种方法允许应用程序来表达自己的喜好,如何将这些权衡时,应作出实施选择从可用的协议。
性能偏好描述由三个整数,其值表明的相对重要性的短连接时间,低延迟,和高带宽。整数的绝对值是不相关的,为了选择一个协议的值进行简单的比较,具有较大的值,表示更强的偏好。如果应用程序更喜欢短连接时间在低延迟和高带宽,例如,就可以调用这个方法的价值(1, 0, 0)
。如果应用更高的带宽比低延迟,低延迟上述连接时间短,就可以调用这个方法的价值(0, 1, 2)
。
此方法调用此方法后,绑定将不会有任何效果。这意味着,为了使用此功能,需要使用无参数构造函数来创建套接字。
connectionTime
-
int
表达短连接时间的相对重要性
latency
-
int
表达低延迟的相对重要性
bandwidth
-
int
表达高带宽的相对重要性
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.