Каким образом назначается удаленный порт в TCP Communication. [Дубликат]

Другой общий случай, когда можно получить это исключение, включает в себя насмешливые классы во время модульного тестирования. Независимо от используемой насмешливой структуры, вы должны убедиться, что все соответствующие уровни иерархии классов должным образом высмеиваются. В частности, все свойства HttpContext, на которые ссылается тестируемый код, должны быть изделены.

См. « Исключение NullReferenceException при проверке пользовательского AuthorizationAttribute » для несколько подробного примера.

7
задан Ivan Novick 25 March 2011 в 18:10
поделиться

3 ответа

Правда ли, что клиент TCP будет динамически выбирать порт для использования и запрещать другим программам быть сервером на этом порту?

Да, это так.

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

Да, вы можете, но не должны. Используйте свойство Bind.

OK .. это вещь:

Когда вы устанавливаете соединение с сервером, вы открываете порт сокета, который больше 1024. Дело в том, это будет высокий номер порта.

Серверу не нужно открывать порт TCP более 1024. В принципе, вы должны поддерживать работу сервера в низком порту. Это то, что нам сообщают все http-документы.

Вы также можете проверить, уже ли выбран порт, и если это так, вы можете открыть сокет сервера в другом порту.

8
ответ дан Rafael Colucci 28 August 2018 в 05:00
поделиться

Если одна программа прослушивается на порту, я не считаю, что другой может. Как правило, нижние порты зарезервированы для определенных сервисов, таких как HTTP на порту 80. Если вам нужен случайный порт, вы должны создать один выше 1024. Список наиболее часто используемых портов смотрите здесь: http: //en.wikipedia .org / wiki / List_of_TCP_and_UDP_port_numbers

изменить: исправлено из комментария ниже

-1
ответ дан ArtB 28 August 2018 в 05:00
поделиться

Да, порт будет выбран из предопределенного диапазона, который зависит от ОС к ОС и блокируется для другого использования. Вы можете выбрать конкретный порт с bind, если вам это нужно.

EDIT:

Единственный случай, когда вы можете иметь несколько сокетов TCP, связанных с одним и тем же локальным портом / IP, когда вы accept() устанавливаете новые сокеты из гнезда для прослушивания. Вы никогда не сможете bind() использовать TCP-порт для использования порта / IP. Также существует некоторая путаница в SO_REUSEADDR, эта опция сокета не позволяет разрешать повторное использование порта, она просто расслабляет правила, когда есть только мертвые тайм-ауты, связанные с нужным вам портом.

2
ответ дан Erik 28 August 2018 в 05:00
поделиться