Я понял, что вы можете написать на 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
?Когда именно отправляются записанные данные по сети?
Спасибо!
edit: Получив ответ на этот вопрос, я нашел другое объяснение от man 2 accept
в Linux.