2016-09-17 4 views
3

Итак, я пытаюсь понять, что в целом и особенно сокеты в данный момент времени они понимают. Я использую библиотеку сокетов Python, чтобы играть с вещами.Что делает socket.connect() делать внутренне?

Я столкнулся с множеством примеров в Интернете, которые демонстрируют сокеты TCP и UDP через простые ECHO-серверы в качестве примеров.

Для TCP коллег ресурсы предполагают, что TCP клиент использует эхо

socket_object.connect() для подключения к серверу и обмена данными над ним. Аналогично, эхо-сервер TCP использует listen() и accept() для обработки соединений и взаимодействий с клиентом.

Вопросы

  1. Теперь эти ресурсы отметить, что это соединение TCP и, следовательно, ориентированный на соединение (я понимаю, концептуально). Пожалуйста, помогите . Я понимаю, что это на самом деле означает сказать, что ориентированная на соединение реализация мудрая? И как справиться с этим API-интерфейсы connect(), listen() и accept()?
  2. Аналогично, для коллег UDP, то resources предполагают, что клиент UDP эхо не использует подключения() и ни делает эхо сервер использует UDP любой слушать() или принимать(). Это помогает достичь бесконтактного поведения . Пожалуйста, помогите мне понять, как именно? Или может быть ответом на вопрос 1 выше, который поможет мне понять это .

  3. Кроме того, в случае UDP-эхо-клиента в нашем случае, почему бы не понадобилось для привязки к сокету. Даже для того, чтобы отправлять данные на удаленный сервер , ему по-прежнему не нужна конечная точка сокета для фактической отправки данных , а также получения данных, когда сервер отправит их обратно? Или, по сути, я понимаю, что понимание того, что bind() действительно делает внутренне, поможет мне понять это.

ответ

1

Пожалуйста, помогите мне понять, что это на самом деле значит сказать, ориентированной на подключение реализации мудрым?

Это означает, что протокол TCP использует открытое соединение для работы. Другими словами, там должно быть быть открытым соединением, через которое отправляются пакеты сообщения, отправленного через сокет.

И как это сделать, чтобы использовать API connect(), listen() и accept()?

Я никогда не использовал эту библиотеку сокетов Python, но я думаю, что для этого достаточно моего достаточно базового знания о сокетах. Метод connect используется для того, чтобы открыть ту же самую связь, о которой я упомянул в предыдущем ответе. Два других метода используются сервером для приема сообщений, отправленных от клиента через это открытое соединение.

Аналогично, для UDP-аналогов ресурсы предполагают, что эхо-клиент UDP не использует никакого соединения(), а также не использует эхо-сервер UDP любые функции listen() или accept(). Это помогает ему достичь бесконтактного поведения. Пожалуйста, помогите мне понять, как именно?

Возможно, вы знаете, что протокол UDP, отличный от протокола TCP, не полагается на открытое соединение для работы. Это означает, что пакеты сообщений отправляются «атомарно» (независимо друг от друга), что делает предыдущие методы бесполезными. Как указано в документах, которые вы связали в своем вопросе:

Поскольку соединения не существует, сервер не должен слушать и принимать соединения. Для связывания своего сокета с портом нужно использовать bind(), а затем ждать отдельных сообщений.

Это означает, что все, что должен использовать сервер, использующий связь UDP для сокетов, - это зарегистрировать порт, из которого он будет ожидать сообщения сокета, которые будут отправляться от клиента и получены через метод recvfrom. Клиент также использует этот метод для приема сообщений с сервера.

Даже для отправки данных на удаленный сервер ему по-прежнему не нужна конечная точка сокета, чтобы фактически отправлять данные, а также получать данные, когда сервер отправляет их обратно?

API, вероятно, не предоставляет метод для этой клиентской стороны, поскольку клиенты выбирают порт динамически и не позволяют другим программам быть сервером в этом порту или, по крайней мере, должны.

+0

Спасибо, это был достойный ответ, который пытался объяснить некоторые вещи, но опять же только с концептуальной абстракции, которую я уже довольно хорошо понимаю. Однако, если вы просмотрите мой вопрос или, может быть, я бы лучше сделал это, чтобы подчеркнуть его, это было о том, чтобы спросить об этом. Как в том, как точно ориентирована связь, например, с точки зрения реализации? Я имею в виду, есть ли какой-то токен и т. Д., Аналогичный файлу сеанса, например, в случае веб-приложений и т. Д.? Был бы признателен, если бы вы могли пролить свет на это. – qre0ct

Смежные вопросы