我已经意识到,如果没有被Socket
接受,你可以写信给ServerSocket
。当我打电话给ServerSocket.accept()
时,它会自动获得连接的Socket
而不必再次使用connect()
。
public static void main(String[] args)
{
ServerSocket serverSocket = ServerSocketFactory.getDefault().createServerSocket(0);
int boundPort = serverSocket.getLocalPort();
String host = serverSocket.getInetAddress().getCanonicalHostName();
Socket socket = new Socket(host, boundPort);
write("Hi!"); // writes to socket's BufferedOutputStream
Socket acceptedSocket = serverSocket.accept();
read(); // reads and prints acceptedSocket's BufferedInputStream
}
输出:
Hi!
不仅接受了Socket
,而且即使我在OutputStream
之前写信给accept()
,也会输出信息。我试着查看源代码,但很难遵循。所以我的问题是,accept()
的流程是什么?在某处有连接Sockets
的缓冲区吗?
另外,如何写OutputStream
工作?什么时候写入的数据确实通过网络发送?
谢谢!
编辑:收到这个问题的答案后,我在Linux上找到了man 2 accept
的另一个解释。
这就是实际发生的事情。