implements Closeable
类简介:
这个类实现了服务器套接字。一个服务器套接字等待来自网络的请求。它基于该请求执行某些操作,然后将结果返回给请求者。
服务器套接字的实际工作是由SocketImpl类的实例来执行的。应用程序可以更改创建套接字实现的套接字工厂来配置自身创建适应本地防火墙的套接字。
构造函数:
public ServerSocket() throws IOException
创建一个无绑定的服务器套接字。
public ServerSocket(int port) throws IOException
创建一个服务器套接字并绑定到指定的端口上。端口号码为零意味着这个端口号码是自动生成的,通常是在一个临时的端口边界里。这个端口号码之后可以通过调用getLocalPort()方法来获取。
传入的请求连接指令的最大队列长度被设置为50. 如果一个连接指令到达的时候连接队列已满,那么这个连接将被拒绝。
如果应用程序指定了服务器套接字工厂,则工厂的createSocketImpl()方法创建实际的套接字实现。否则创建简单的套接字。
如果有安全管理器,那么它的checkListen()方法会以端口号为参数被调用以确保该操作是被允许的。这将导致SecurityException。
参数:
port 端口号,为零则自动分配端口号。
public ServerSocket(int port, int backlog) throws IOException
创建一个服务器套接字,绑定到指定的本地端口号上,并指定最大请求连接数。端口号码为零意味着这个端口号码是自动生成的,通常是在一个临时的端口边界里。这个端口号码之后可以通过调用getLocalPort()方法来获取。
传入的请求连接指令的最大队列长度被设置为backlog参数值. 如果一个连接指令到达的时候连接队列已满,那么这个连接将被拒绝。
如果应用程序指定了服务器套接字工厂,则工厂的createSocketImpl()方法创建实际的套接字实现。否则创建简单的套接字。
如果有安全管理器,那么它的checkListen()方法会以端口号为参数被调用以确保该操作是被允许的。这将导致SecurityException。backlog参数是等待连接到此套接字上的最大请求数。
参数:
port 端口号,为零则自动分配端口号。
backlog 进入连接队列的最大请求数。
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
创建一个服务器套接字,绑定指定最大连接数和本地IP地址。bindAddr参数可用于多宿主机,服务器套接字只接受连接请求的地址。如果bindAddr为空,它将默认接受连接在任何/所有的本地地址。端口号必须在0~65535之间,包含边界。端口号码为零意味着这个端口号码是自动生成的,通常是在一个临时的端口边界里。这个端口号码之后可以通过调用getLocalPort()方法来获取。
如果有安全管理器,那么它的checkListen()方法会以端口号为参数被调用以确保该操作是被允许的。这将导致SecurityException。backlog参数是等待连接到此套接字上的最大请求数。
参数:
port 端口号,为零则自动分配端口号。
backlog 进入连接队列的最大请求数。
bindAddr 服务器将绑定的本地地址。
详细方法:
public void bind(SocketAddress endpoint) throws IOException
绑定服务器套接字到指定的地址(IP地址和端口号)。
如果地址为null,则系统会挑选一个临时的端口号和有效的地址绑定这个套接字。
参数:
endpoint 绑定的的IP地址号端口号。
public void bind(SocketAddress endpoint, int backlog) throws IOException
绑定服务器套接字到指定的地址(IP地址和端口号)。
如果地址为null,则系统会挑选一个临时的端口号和有效的地址绑定这个套接字。
backlog参数是等待连接到此套接字上的最大请求数。
参数:
endpoint 绑定的的IP地址号端口号。
backlog 接入连接队列的最大请求数。
public InetAddress getInetAddress()
返回服务器套接字的本地地址。如果套接字之前的绑定被关闭了,这个方法还是会返回套接字连接之前的本地地址。
public int getLocalPort()
返回套接字监听的端口号。
public SocketAddress getLocalSocketAddress()
返回套接字绑定的终端地址。
public Socket accept() throws IOException
监听连接到该套接字上的连接请求并接受连接。这个方法会阻塞直到连接到来。
一个新的套接字对象s将被创建;如果有安全管理器,安全管理器的以s.getInetAddress().getHostAddress()和s.getPort()为参数的checkAccept方法会被执行,以此来确定操作是被允许的。这将导致SecurityException。
返回:
返回一个新的套接字。
protected final void implAccept(Socket s) throws IOException
public void close() throws IOException
关闭套接字。在accept()方法中的任何当前阻塞的线程将会抛出SocketException异常。
如果这个套接字和一个管道关联,那么这个管道也会关闭。
public ServerSocketChannel getChannel()
返回一个独一无二的和该套接字关联的ServerSocketChannel对象。
public boolean isBound()
返回这个服务器套接字的绑定状态。
返回:
如果这个服务器套接字成功的绑定到了一个地址则返回true。
public boolean isClosed()
返回这个服务器套接字的关闭状态。
返回:
如果这个套接字已经关闭则返回true。
public static void setSocketFactory(SocketImplFactory fac) throws IOException
为应用程序设置服务器套接字实现工厂。工厂只可以指定一次。