Как несколько клиентов подключаются одновременно к одному порту, скажем, 80, на сервере? [Дубликат]

Существует легкая библиотека json для C #, называемая SimpleJson, которую можно найти по адресу http://simplejson.codeplex.com https://github.com/facebook-csharp-sdk/simple-json

Он поддерживает .net 3.5+, silverlight и Windows 7 телефона.

Поддерживает динамический для .net 4.0

Также может быть установлен как пакет nuget

Install-Package SimpleJson

373
задан Tshepang 17 February 2014 в 15:07
поделиться

2 ответа

Во-первых, "порт" - это просто номер. Все, что "соединение с портом" на самом деле представляет собой пакет, номер которого указан в поле заголовка "порт назначения".

Итак, на ваш вопрос есть два ответа: один для протоколов с состоянием и один для протоколов без состояния.

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

Для протокола с состоянием (например, TCP) соединение идентифицируется 4 кортежем, состоящим из портов источника и назначения и IP-адресов источника и назначения. Таким образом, если две разные машины подключаются к одному и тому же порту на третьей машине, существует два разных соединения, поскольку IP-адреса источника отличаются. Если одна и та же машина (или две машины за NAT или иным образом разделяющие один и тот же IP-адрес) дважды подключается к одному удаленному концу, соединения различаются по порту источника (который обычно является случайным портом с высоким номером).

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

Порты - это способ мультиплексирования IP-адресов, чтобы разные приложения могли прослушивать одну и ту же пару IP-адрес/протокол. Пока приложение не определит свой собственный протокол более высокого уровня, мультиплексировать порт невозможно. Если два соединения, использующие один и тот же протокол, одновременно имеют идентичные IP-адреса источника и назначения и идентичные порты источника и назначения, они должны быть одним и тем же соединением.

446
ответ дан 22 November 2019 в 23:55
поделиться

Обычно для каждого подключающегося клиента сервер создает дочерний процесс, который взаимодействует с клиентом (TCP). Родительский сервер передает дочернему процессу созданный сокет, который обменивается данными с клиентом.

Когда вы отправляете данные в сокет с дочернего сервера, стек TCP в ОС создает пакет, идущий обратно к клиенту, и устанавливает "порт от" на 80.

26
ответ дан 22 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: