网络
Socket
是对客户端进行网络通信的封装;ServerSocket
是对服务端网络通信的封装。ServerSocket
的accept()
方法会阻塞,是调用了native方法。如果是在mac下,本质是调用了java.net.PlainSocketImpl
类的native方法native void socketAccept(SocketImpl s)
,查看openjdk1.7的源码,/solaris/native/java/net/PlainSocketImpl.c中的Java_java_net_PlainSocketImpl_socketAccept
方法中,有for (;;)
循环,会一直循环直到连接上、超时或异常。Socket
的connect
方法也是调用了native的方法。socket.getInputStream()
会分别返回SocketInputStream
类,继承FileInputStream
。它的read
相关的方法均会调用native的socketRead0
方法。socket.getOutputStream()
会分别返回SocketOutputStream
类,继承FileOutputStream
。它的write
相关的方法均会调用native的socketWrite0
方法。