目录
BIO(一)、ServerSocket的bind()方法
BIO是同步阻塞的IO方式。
同步/异步是操作系统级别:操作系统在收到程序的IO请求之后,如果IO资源没有准备好的话,如何响应给程序?
同步 | 异步 |
---|---|
操作系统在IO资源准备好之前不响应给程序 | 先返还给程序一个标志,这个标志用于当IO资源准备好后通过事件机制发送的内容应该到什么地方 |
阻塞/非阻塞是程序级别:程序在向操作系统进行IO请求时,如果IO资源未准备好,程序应该如何处理?
阻塞 | 非阻塞 |
---|---|
程序什么都不做,一直等待IO资源准备好 | 程序可以做其他的事情,但是会时不时的检查IO资源是否准备好 |
调用时机
当我们new ServerSocket(port)
的时候调用bind(SocketAddress endpoint, int backlog)
方法。
方法源码
//将ServerSocket和IP地址、端口号、以及请求连接队列的最大长度backlog进行绑定
public void bind(SocketAddress endpoint, int backlog) throws IOException {
if (isClosed())
throw new SocketException("Socket is closed");
if (!oldImpl && isBound())
throw new SocketException("Already bound");
if (endpoint == null)
endpoint = new InetSocketAddress(0);
if (!(endpoint instanceof InetSocketAddress))
throw new IllegalArgumentException("Unsupported address type");
InetSocketAddress epoint = (InetSocketAddress) endpoint;
if (epoint.isUnresolved())
throw new SocketException("Unresolved address");