2012-03-04 5 views
1

У меня есть клиентское и серверное приложение с использованием UDP-порта 25565. Чтобы запустить их на одном компьютере, поскольку только одно приложение может привязываться к порту 25565, означает ли это, что это мне необходимо использовать два отдельных порта для передачи данных между приложениями?Запуск клиента и сервера на одном компьютере

То, что я имею в виду следующее -

Client -> 25565 -> Сервер

Client < - 25566 < - Сервер

Это единственное решение, или есть другой способ справиться с этим?

ответ

4
  • Ваше серверное приложение открывает порт и ждет подключения клиента.
  • Клиент должен знать этот порт заранее, чтобы он мог установить соединение с требуемой услугой.
  • Клиент может использовать любые доступные порты для инициирования этого соединения (лучше использовать порты> 1000).
  • Сервер видит во входящем пакете, который использует порт, который клиент использует, поэтому он отправит anwser к нему. Не нужно указывать его в вашем дизайне.
  • После установления связи соединение TCP/IP затем идентифицируется этими 4 значениями: IP-адрес сервера, порт сервера, клиентский IP-адрес, порт клиента.
  • Ни одно другое соединение не может иметь одинаковые четыре значения.

Чтобы ответить на ваш вопрос. Соединение TCP/IP двунаправлено, после его установки сервер может отправлять данные клиенту и наоборот.

Я хотел бы обратить схему так:

SERVER порт 25565 < -> КЛИЕНТ порт 25566 (или любой другой порт)

+0

Я не использую TCP, я использую UDP. – ctor

+0

Я думаю, вы знаете, что UDP небезопасен, вы можете потерять пакеты, они могут прийти в неправильном порядке, вы не можете передавать шлюз от сервера к клиенту и все такое ... Но и сервер, и клиент находятся на одной машине. Используя UDP, ваш клиент может открыть любой порт для прослушивания и сообщить серверу о его отправке. И ваша схема подходит для UDP. – bokan

+0

Да, я знаю, что это не безопасно, но это не должно быть проблемой для моих целей. Спасибо :) – ctor

2

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

+0

Я забыл упомянуть, что использую сокеты UDP. – ctor

0

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

Однако, если вы действительно хотите, чтобы обе программы прослушивали один и тот же порт, вам понадобятся виртуальные сетевые интерфейсы, такие как TUN/TAP (есть Windows port). Затем оба приложения будут привязываться к порту с таким же номером, но на разных сетевых интерфейсах.

+0

Изменение порта кажется самым простым вариантом, спасибо :) – ctor

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