Соединения без соединения - PullRequest
4 голосов
/ 13 марта 2012

Я только начал изучать программирование сокетов, и я столкнулся с концепцией, которую я видел раньше, но меня это немного смутило.

Кажется, что UDP-соединения являются "соединениями без соединения, без соединения".

Разве это не "лишено соединения" и "не подключено" избыточно?

Есть ли тогда 4 типа соединений?

то есть

  1. без соединения,не подключен
  2. без соединения, подключен
  3. ориентирован на соединение не подключен
  4. ориентирован на соединение, подключен

И, наконец, как можно «без соединения, не подключенфункция соединения?Разве это не оксюморон?лол

Ответы [ 4 ]

10 голосов
/ 13 марта 2012

Технически, вы можете вызвать connect() через сокет UDP. В этом случае сокет запоминает адрес однорангового узла, поэтому датаграммы можно отправлять с использованием системных вызовов send() или write() вместо sendto(). Кроме того, он заставляет сокет получать дейтаграммы только от этого узла, датаграммы от других узлов отбрасываются.

Возможно, это так называемый сокет "без соединения, подключен", что означает, что connect() вызов был вызван на сокете UDP.

5 голосов
/ 13 марта 2012

На самом деле, нет такой вещи, как соединение UDP. По сути, UDP - это протокол «забей и забудь», в котором вы просто отправляете пакеты данных на какой-либо компьютер (без необходимости сначала устанавливать соединение) и надеетесь, что другая машина их заберет (если они вообще это сделают).

Когда вы устанавливаете «сокетное соединение», ничего волшебного не происходит, то есть провода между вами и вашим удаленным клиентом не меняют цвет или что-то в этом роде. То, что происходит во время соединения, заключается в том, что обе стороны соглашаются на получение и отправку данных надежно через Интернет по заданному протоколу. Абсолютно не обязательно быть связанным с чем-либо для отправки и получения материалов через Интернет, однако соединения позволяют гарантировать целостность и порядок (и некоторые другие вещи), поскольку обе машины согласились следовать определенному методу.

Я не знаю такой вещи, как «без соединения, без связи». Кто бы вам ни сказал, вероятно, просто пытался подчеркнуть несвязанный аспект UDP.

1 голос
/ 13 марта 2012

С помощью сокетов UDP вы можете подключиться к серверу, как и с сокетами TCP. Но вы также можете отправлять пакеты напрямую на сервер, не подключаясь, с помощью функции sendto.

0 голосов
/ 13 марта 2012

Да, технически UDP не устанавливает соединения.Однако ваш код может иметь соединение с локальным сокетом UDP, который он использует для передачи пакетов.

...