Там около 15 независимых вопросов, но я сделаю все возможное, чтобы ответить на них:
Существует метод bind(), а также connect() и разъединение(). Развязки () нет. Это потому, что при отключении сокет не привязан?
bind()
отделен от connect()
и disconnect()
. Bind используется для привязки сокета к определенному порту - эффективно «прослушивать» соединения, тогда как connect()
используется для открытия соединения с сокетом, который уже прослушивает определенный порт. Эквивалентом unbind()
является close()
Заботится ли сборка мусора об этом после выхода из программы? Или это даже не корректный вопрос?
Это абсолютно правильный вопрос, хотя сборка мусора — это технология, используемая для управления памятью, а не для управления ресурсами сокета/ОС. Если вы не освободите определенный порт, он останется связанным с вашим приложением до тех пор, пока ваше приложение не завершится, а затем он будет возвращен ОС. Это функциональность уровня ОС, а не функциональность JVM и т. д.
Кроме того, при создании DatagramSocket, чем отличается, если я укажу только порт или укажу порт и адрес?
В какой-то момент вы должны указать интернет-адрес и порт или сокет, к которому вы хотите подключиться или выполнить привязку. Нет никакого способа обойти это.
Я создаю программу для сбора данных из сети, поскольку данные плавают вокруг и регистрируют их. Должен ли я просто использовать локальный адрес? Не может ли использование адреса при создании сокета привести к тому, что я не смогу собирать пакеты?
Я не уверен, что вы здесь спрашиваете, вы говорите о регистрации всех пакетов в сети, также известном как сниффер? Это потребует большего, чем простое программирование дейтаграмм. На самом деле вам нужно вводить себя на уровне сетевого адаптера, чтобы перехватывать пакеты, когда они считываются с линии. То, о чем вы говорите, позволит вам получать только те пакеты, которые отправляются на конкретный порт, который вы слушаете.
person
Chris Thompson
schedule
15.06.2011