порт подключенного клиента в sfml

я не понимаю, как работают (tcp-) порты (в sfml).

Насколько я понимаю, sf::TcpListener — это sf::TcpSocket, который на самом деле не может отправлять или получать данные, кроме приема соединений.

Предположим, у меня есть несколько слушателей на разных портах: думайте о них как о клиентах для моей игры (первый порт) и инструменте конфигурации (второй порт), который я пишу прямо сейчас.

Я хотел бы обрабатывать sf::Packet по-разному в зависимости от того, какой порт я их получил.

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

  • Есть ли способ получить информацию от реализации клиента в sfml, к какому порту он намеренно подключался?

  • Есть ли алгоритм, который я могу использовать, чтобы определить, какой это был порт (текущий порт близок к преднамеренному порту или что-то в этом роде)?

  • Мне нужно сохранить это в struct как

    struct wrapped_socket { uint16_t intentional_port; sf::TcpSocket socket; };

    что потребует изменить мою текущую кодовую базу сервера (вызов wrapped_socket::socket->send() вместо socket->send или

  • Есть ли лучшее, прямолинейное решение, о котором я не подумал?

Буду признателен за любую оказанную помощь.


person user3796535    schedule 03.07.2014    source источник


Ответы (1)


У вас есть два разных объекта sf::TcpListener. Вы проверяете соединения на первом объекте слушателя и помещаете эти соединения в одну коллекцию. Затем вы проверяете соединения на втором объекте слушателя и помещаете эти соединения во вторую коллекцию.

Таким образом, соединения являются отдельными и, следовательно, могут обрабатываться соответствующим образом.

person Some programmer dude    schedule 03.07.2014
comment
спасибо, я пойду этим путем. Мои первые мысли о хранении всех сокетов в одной коллекции заключались в том, что добавление другого обработчика на другой порт почти не потребует изменений кода, кроме простого добавления еще одного оператора case, в котором я вызываю другой обработчик. но я думаю, что несколько коллекций полностью сработают, я просто перебираю их все и вызываю соответствующие обработчики. так что еще раз, спасибо. -- есть ли у вас какие-либо слова о том, что мои предположения (разные порты) верны? - person user3796535; 03.07.2014