Какая разница между открытой розеткой и розеткой, которая подключена?
Ява Socket
класс имеет два метода isClosed
а также isConnected
проверить, закрыта ли розетка или подключена соответственно. Я хотел знать, в чем разница между открытым сокетом TCP и открытым и подключенным сокетом TCP, и чем он отличается от UDP.
2 ответа
Проще говоря, Socket
открыт, это сокет, который либо ожидает подключения, либо успешно подключился к другому Socket
, Когда сокет закрыт, это означает, что этот сокет больше не доступен для подключения и что его ресурсы уже освобождены. Socket
это связано, ну, это означает, что сокет подключен к другому Socket
,
Так что Socket
Можно..
- быть открытым и подключенным одновременно.
- быть открытым и не подключенным одновременно.
- не быть подключенным, когда закрыт.
ОБНОВИТЬ
от @Bryan
По-видимому, для сокетов TCP существуют полузакрытые или полуоткрытые состояния; какое использование (сегодня) отличается от его первоначального значения. Подробнее по этой ссылке.
На этой странице представлен довольно хороший обзор состояний сокетов: http://diranieh.com/SOCKETS/SocketStates.htm и различий между сокетами TCP и UDP. В частности:
- Состояние "открыто" (TCP и UDP): создан неназванный сокет. Безымянный сокет - это тот, который не связан с локальным адресом и портом
- Состояние "Подключен" (только TCP): между локальным и удаленным хостом установлена связь (виртуальный канал). Отправка и получение данных теперь возможны.
Обратите внимание, что более новые реализации java.net.DatagramSocket поддерживают расширение для состояний сети TCP/IP: DatagramSocket также может находиться в состоянии "подключен", так что isConnected() не обязательно возвращает false, даже если сокет датаграммы никогда не бывает "подключен" на сетевом уровне. В частности: "Когда DatagramSocket подключен к удаленному адресу, пакеты могут отправляться или приниматься только с этого адреса. По умолчанию сокет дейтаграммы не подключен".
Для получения дополнительной информации см. Источники и JavaDoc.