twodefinitions из Википедии, кажется, ясно мне
В области телекоммуникаций, установление соединение описывает связь между двумя конечными точками сети, в которой сообщение может быть отправлено с одной конечной точки к другим без предварительной договоренности , Устройство на одном конце сообщения передает данные другому, без , сначала гарантируя, что получатель доступен и готов к приему данных . Устройство, отправляющее сообщение , просто отправляет его адресуемому адресату .
...
Соединение-ориентированный сетевой протокол является тот, который доставляет поток данных в том же порядке, как это было отправлено , после первого установления сеанса связи .
Я не думаю, что смогу улучшить эти определения, но позвольте мне попытаться объяснить это с точки зрения программирования сокетов, понимая, что socket is the programming interface for TCP/UDP.В частности, если вы программируете серверные сокеты, скажем, на Java, вы заметите, как этот тип TCP и UDP, ориентированный на соединение и не имеющий отношения, влияет на модель программирования.
В клиент-серверном приложении на основе TCP, прежде чем какая-либо передача данных будет завершена, необходимо установить соединение между клиентским сокетом с серверным сокетом, соответствующим этому клиентскому сокету. На сервере вам необходимо создать ServerSocket
, а затем позвонить accept()
, чтобы получить Socket
, соответствующий соединению клиента. Один такой сокет создается для связи с каждым соединением с любого конкретного удаленного клиента (который инициируется путем создания класса Socket
). Вы можете обратиться к this code sample за подробностями.
С другой стороны, если вы программируете UPD, ваш серверный сокет в основном представляет собой объект DatagramSocket
, который прослушивает порт и получает все датаграммы, отправленные ему, а также может отправлять обратно датаграммы в любой конкретный клиентский сокет. То есть один серверный сокет обслуживает всех клиентов, потому что нет никакого сквозного соединения между любым клиентским соединением и сервером. (Обратите внимание, что также не требуется шаг «serverSocket#accept()
».) Другими словами, каждый клиент и сервер могут просто отправлять дейтаграммы, не заботясь о том, готова ли другая конечная точка принимать датаграммы или нет. Вы можете обратиться к this code sample за подробностями.