您的位置:首页 > 编程语言 > Java开发

java.net 类 ServerSocket

2014-05-08 01:31 120 查看

java.net

类 ServerSocket

java.lang.Object
java.net.ServerSocket

直接已知子类: SSLServerSocket

public class ServerSocketextends Object



此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

服务器套接字的实际工作由
SocketImpl
类的实例执行。应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字。

从以下版本开始: JDK1.0 另请参见:
SocketImpl
,
setSocketFactory(java.net.SocketImplFactory)
,
ServerSocketChannel


构造方法摘要
ServerSocket()
创建非绑定服务器套接字。
ServerSocket(int port)
创建绑定到特定端口的服务器套接字。
ServerSocket(int port,int backlog)
利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。
ServerSocket(int port,int backlog,
InetAddress bindAddr)
使用指定的端口、侦听 backlog 和要绑定到的本地 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()
返回此套接字绑定的端点的地址,如果尚未绑定则返回
null
int
getReceiveBufferSize()
获取此
ServerSocket 的 SO_RCVBUF 选项的值,该值是将用于从此 ServerSocket 接受的套接字的建议缓冲区大小。
boolean
getReuseAddress()
测试是否启用 SO_REUSEADDR。
int
getSoTimeout()
获取 SO_TIMEOUT 的设置。
protectedvoid
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 套接字选项。
staticvoid
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
构造方法详细信息

ServerSocket

public ServerSocket()
throws IOException

创建非绑定服务器套接字。

抛出:
IOException
- 如果打开套接字时发生 IO 错误。

ServerSocket

public ServerSocket(int port)
throws IOException

创建绑定到特定端口的服务器套接字。端口
0
在所有空闲端口上创建套接字。
传入连接指示(对连接的请求)的最大队列长度被设置为
50
。如果队列满时收到连接指示,则拒绝该连接。

如果应用程序已指定服务器套接字工厂,则调用该工厂的
createSocketImpl
方法来创建实际套接字实现。否则创建“普通”套接字。

如果存在安全管理器,则首先使用
port
参数作为参数调用其
checkListen
方法,以确保允许该操作。这可能会导致 SecurityException 异常。

参数:
port
- 端口号;或者为
0
,表示使用任何空闲端口。 抛出:
IOException
- 如果打开套接字时发生 I/O 错误。
SecurityException
- 如果安全管理器存在并且其
checkListen
方法不允许进行该操作。另请参见:
SocketImpl
,
SocketImplFactory.createSocketImpl()
,
setSocketFactory(java.net.SocketImplFactory)
,
SecurityManager.checkListen(int)


ServerSocket

public ServerSocket(int port,
int backlog)
throws IOException

利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。端口号
0
在所有空闲端口上创建套接字。
传入连接指示(对连接的请求)的最大队列长度被设置为
backlog
参数。如果队列满时收到连接指示,则拒绝该连接。

如果应用程序已指定服务器套接字工厂,则调用该工厂的
createSocketImpl
方法来创建实际套接字实现。否则创建“普通”套接字。

如果存在安全管理器,则首先使用
port
参数作为参数调用其
checkListen
方法,以确保允许该操作。这可能会导致 SecurityException 异常。

backlog
参数必须是大于 0 的正值。如果传递的值等于或小于 0,则使用默认值。

参数:
port
- 指定的端口;或者为
0
,表示使用任何空闲端口。
backlog
- 队列的最大长度。 抛出:
IOException
- 如果打开套接字时发生 I/O 错误。
SecurityException
- 如果安全管理器存在并且其
checkListen
方法不允许进行该操作。另请参见:
SocketImpl
,
SocketImplFactory.createSocketImpl()
,
setSocketFactory(java.net.SocketImplFactory)
,
SecurityManager.checkListen(int)


ServerSocket

public ServerSocket(int port,
int backlog,
InetAddress bindAddr)
throws IOException

使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。bindAddr 参数可以在 ServerSocket 的多宿主主机 (multi-homed host) 上使用,ServerSocket 仅接受对其地址之一的连接请求。如果
bindAddr 为 null,则默认接受任何/所有本地地址上的连接。端口必须在 0 到 65535 之间(包括两者)。
如果存在安全管理器,则此方法使用
port
作为参数调用其
checkListen
方法,以确保允许该操作。这可能会导致 SecurityException 异常。

backlog
参数必须是大于 0 的正值。如果传递的值等于或小于 0,则使用默认值。

参数:
port
- 本地 TCP 端口
backlog
- 侦听 backlog
bindAddr
- 要将服务器绑定到的InetAddress 抛出:
SecurityException
- 如果安全管理器存在并且其
checkListen
方法不允许进行该操作。
IOException
- 如果打开套接字时发生 I/O 错误。从以下版本开始: JDK1.1 另请参见:
SocketOptions
,
SocketImpl
,
SecurityManager.checkListen(int)


方法详细信息

bind

publicvoid bind(SocketAddress endpoint)
throws IOException

ServerSocket
绑定到特定地址(IP 地址和端口号)。
如果地址为
null
,则系统将挑选一个临时端口和一个有效本地地址来绑定套接字。

参数:
endpoint
- 要绑定的 IP 地址和端口号。 抛出:
IOException
- 如果绑定操作失败或者已经绑定了套接字。
SecurityException
- 如果
SecurityManager
存在并且其
checkListen
方法不允许该操作。
IllegalArgumentException
- 如果端点是不受此套接字支持的SocketAddress 子类从以下版本开始: 1.4

bind

publicvoid bind(SocketAddress endpoint,
int backlog)
throws IOException

ServerSocket
绑定到特定地址(IP 地址和端口号)。
如果地址为
null
,则系统将挑选一个临时端口和一个有效本地地址来绑定套接字。

backlog
参数必须是大于 0 的正值。如果传递的值等于或小于 0,则使用默认值。

参数:
endpoint
- 要绑定的 IP 地址和端口号。
backlog
- 侦听 backlog 长度。 抛出:
IOException
- 如果绑定操作失败或者已经绑定了套接字。
SecurityException
- 如果
SecurityManager
存在并且其
checkListen
方法不允许该操作。
IllegalArgumentException
- 如果端点是不受此套接字支持的SocketAddress 子类从以下版本开始: 1.4

getInetAddress

publicInetAddress getInetAddress()

返回此服务器套接字的本地地址。

返回:将此套接字绑定到的地址;如果套接字是未绑定的,则返回
null


getLocalPort

publicint getLocalPort()

返回此套接字在其上侦听的端口。

返回:此套接字侦听的端口号;如果尚未绑定套接字,则返回 -1。

getLocalSocketAddress

publicSocketAddress getLocalSocketAddress()

返回此套接字绑定的端点的地址,如果尚未绑定则返回
null


返回:表示此套接字的本地端点的
SocketAddress
,如果尚未绑定则返回
null
从以下版本开始: 1.4 另请参见:
getInetAddress()
,
getLocalPort()
,
bind(SocketAddress)


accept

publicSocket accept()
throws IOException

侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
创建新套接字
s
,如果存在安全管理器,则使用
s.getInetAddress().getHostAddress()

s.getPort()
作为参数调用安全管理器的
checkAccept
方法,以确保允许该操作。这可能会导致 SecurityException 异常。

返回:新套接字 抛出:
IOException
- 如果等待连接时发生 I/O 错误。
SecurityException
- 如果安全管理器存在并且其
checkAccept
方法不允许进行该操作。
SocketTimeoutException
- 如果以前使用 setSoTimeout 设置了超时并且已到达超时值。
IllegalBlockingModeException
- 如果此套接字具有关联的通道、通道处于非阻塞模式并且不存在准备接受的连接另请参见:
SecurityManager.checkAccept(java.lang.String,int)


implAccept

protected finalvoid implAccept(Socket s)
throws IOException

ServerSocket 的子类使用此方法重写 accept() 以返回它们自己的套接字子类。因此,FooServerSocket 通常传递给此方法一个空 FooSocket。从 implAccept 返回时,FooSocket 将连接到客户端。

参数:
s
-Socket 抛出:
IllegalBlockingModeException
- 如果此套接字具有关联通道并且通道处于非阻塞模式
IOException
- 如果在等待连接时发生 I/O 错误。从以下版本开始: JDK1.1

close

publicvoid close()
throws IOException

关闭此套接字。 在
accept()
中所有当前阻塞的线程都将会抛出
SocketException

如果此套接字有一个与之关联的通道,则关闭该通道。

抛出:
IOException
- 如果关闭套接字时发生 I/O 错误。

getChannel

publicServerSocketChannel getChannel()

返回与此套接字关联的唯一
ServerSocketChannel
对象(如果有)。
当且仅当通过
ServerSocketChannel.open
方法创建了通道本身时,服务器套接字才具有一个通道。

返回:与此套接字关联的服务器套接字通道,如果没有为通道创建套接字,则返回 null。从以下版本开始: 1.4

isBound

publicboolean isBound()

返回 ServerSocket 的绑定状态。

返回:如果将 ServerSocket 成功地绑定到一个地址,则返回 true从以下版本开始: 1.4

isClosed

publicboolean isClosed()

返回 ServerSocket 的关闭状态。

返回:如果已经关闭了套接字,则返回 true从以下版本开始: 1.4

setSoTimeout

publicvoid setSoTimeout(int timeout)
throwsSocketException

通过指定超时值启用/禁用 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,对此 ServerSocket 调用 accept() 将只阻塞此时间长度。如果超过超时值,将引发
java.net.SocketTimeoutException,虽然 ServerSocket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。

参数:
timeout
- 指定的超时(以毫秒为单位) 抛出:
SocketException
- 如果在底层协议中存在错误,如 TCP 错误。从以下版本开始: JDK1.1 另请参见:
getSoTimeout()


getSoTimeout

publicint getSoTimeout()
throws IOException

获取 SO_TIMEOUT 的设置。返回 0 意味着禁用了选项(即无穷大的超时值)。

返回:SO_TIMEOUT 值 抛出:
IOException
- 如果发生 I/O 错误从以下版本开始: JDK1.1 另请参见:
setSoTimeout(int)


setReuseAddress

publicvoid setReuseAddress(boolean on)
throwsSocketException

启用/禁用 SO_REUSEADDR 套接字选项。
关闭 TCP 连接时,该连接可能在关闭后的一段时间内保持超时状态(通常称为 TIME_WAIT 状态或 2MSL 等待状态)。对于使用已知套接字地址或端口的应用程序而言,如果存在处于超时状态的连接(包括地址和端口),可能不能将套接字绑定到所需的
SocketAddress。

在使用
bind(SocketAddress)
绑定套接字前启用
SO_REUSEADDR 可允许上一个连接处于超时状态时绑定套接字。

当创建 ServerSocket 时,SO_REUSEADDR 的初始设置是不确定的。应用程序可以使用
getReuseAddress()
来确定 SO_REUSEADDR 的初始设置。

在绑定套接字(请参阅
isBound()
)后启用或禁用 SO_REUSEADDR 时的行为是不确定的。

参数:
on
- 是否启用 SO_REUSEADDR 套接字选项 抛出:
SocketException
- 如果启用或禁用
SO_RESUEADDR 套接字选项时发生错误,或者关闭了套接字。从以下版本开始: 1.4 另请参见:
getReuseAddress()
,
bind(SocketAddress)
,
isBound()
,
isClosed()


getReuseAddress

publicboolean getReuseAddress()
throwsSocketException

测试是否启用 SO_REUSEADDR。

返回:指示是否启用 SO_REUSEADDR 的
boolean
值。 抛出:
SocketException
- 如果底层协议出现错误,例如 TCP 错误。从以下版本开始: 1.4 另请参见:
setReuseAddress(boolean)


toString

publicString toString()

作为
String
返回此套接字的实现地址和实现端口。

覆盖:
Object
中的
toString


返回:此套接字的字符串表示形式。

setSocketFactory

public staticvoid setSocketFactory(SocketImplFactory fac)
throws IOException

为应用程序设置服务器套接字实现工厂。工厂只能指定一次。
当应用程序创建新的服务器套接字时,调用套接字实现工厂的
createSocketImpl
方法创建实际的套接字实现。

除非已经设置了工厂,否则向该方法传递
null
是无操作。

如果有安全管理器,则此方法首先调用安全管理器的
checkSetFactory
方法,以确保允许进行此操作。这可能会导致 SecurityException 异常。

参数:
fac
- 所需的工厂。 抛出:
IOException
- 如果设置套接字工厂时发生 I/O 错误。
SocketException
- 如果已经定义该工厂。
SecurityException
- 如果安全管理器存在并且其
checkSetFactory
方法不允许进行该操作。另请参见:
SocketImplFactory.createSocketImpl()
,
SecurityManager.checkSetFactory()


setReceiveBufferSize

publicvoid setReceiveBufferSize(int size)
throwsSocketException

为从此 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 或负。从以下版本开始: 1.4 另请参见:
getReceiveBufferSize()


getReceiveBufferSize

publicint getReceiveBufferSize()
throwsSocketException

获取此 ServerSocket 的 SO_RCVBUF 选项的值,该值是将用于从此 ServerSocket 接受的套接字的建议缓冲区大小。
注意,在接受的套接字中实际设置的值通过调用
Socket.getReceiveBufferSize()
来确定。

返回:此Socket 的 SO_RCVBUF 选项的值。 抛出:
SocketException
- 如果底层协议出现错误,例如 TCP 错误。从以下版本开始: 1.4 另请参见:
setReceiveBufferSize(int)


setPerformancePreferences

publicvoid setPerformancePreferences(int connectionTime,
int latency,
int bandwidth)

设置此 ServerSocket 的性能首选项。
默认情况下套接字使用 TCP/IP 协议。有些实现可能提供与 TCP/IP 具有不同性能特征的替代协议。此方法允许应用程序在实现从可用协议中作出选择时表明它自己关于应该如何进行折衷的首选项。

性能首选项由三个整数描述,它们的值分别指示短连接时间、低延迟和高带宽的相对重要性。这些整数的绝对值没有意义;为了选择协议,需要简单地比较它们的值,较大的值指示更强的首选项。例如,如果应用程序相对于低延迟和高带宽更希望短连接时间,则其可以使用值
(1, 0, 0) 调用此方法。如果应用程序相对于低延迟更希望高带宽,且相对于短连接时间更希望低延迟,则其可以使用值 (0, 1, 2) 调用此方法。

在绑定套接字后调用此方法无效。这意味着,需要利用无参数构造方法创建套接字才能使用此功能。

参数:
connectionTime
- 表明短连接时间的相对重要性的int
latency
- 表明低延迟的相对重要性的int
bandwidth
- 表明高带宽的相对重要性的int从以下版本开始: 1.5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: