我意识到您可以在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
中找到了另一种解释。
答案 0 :(得分:0)
这就是实际情况。