Boost Socket/Acceptor не может слушать/подключаться к одному порту?

Я немного новичок в Boost, но я пытаюсь создать сервер, который может принимать соединения от клиента на данном порту. Этот сервер также должен иметь возможность писать клиенту на одном и том же порту.

Однако, когда я пытаюсь реализовать как с помощью acceptor_.bind() / acceptor_.listen() , так и socket_.connect (* iterator) сбой async_accept() с недопустимой функциональной ошибкой.

Если я использую только acceptor_.bind() , acceptor_.listen() , я могу писать в сокет (от сервера к клиенту) с помощью async_write() .

Если я использую только socket_.connect() (но комментирую acceptor_.bind() , acceptor_.listen() ), я могу для чтения из сокета (данные, отправленные от клиента на сервер) с помощью async_read_some() .

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

1
вместо того, чтобы описывать свой код со словами, опубликуйте полный код , который показывает проблему, которую вы описываете.
добавлено автор Sam Miller, источник

2 ответы

Почему вы пытаетесь выполнить connect() для клиента, который уже подключен к вашему серверу? Просто напишите в существующий сокет, который был принят для этого соединения.

Если вы должны connect() второе соединение с клиентом (например, как и протокол FTP для передачи данных), не указывайте порт для привязки этого сокета. Пусть ОС решит использовать подходящий порт.

2
добавлено
Вы были абсолютно правы! Не нужно было слушать и подключаться, просто подключаться и работать с асинхронным чтением/записью. Спасибо!
добавлено автор user_48349383, источник

Кажется, вы не поняли некоторые основные понятия сетевого программирования, это не связано с повышением или библиотекой Asio. Вообще говоря, серверы вызывают accept() , а клиенты вызывают connect() . Примеры asio показывают это подробно, см.

Обратите внимание, что сервер вызывает

    <�Литий> async_accept() </литий> <�Литий> async_read_some() </литий> <�Литий> async_write() </литий>

тогда как клиент вызывает

  • подключения()
  • <�Литий> записи() </литий>
  • прочитать()
1
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

ntwrk
ntwrk
1 773 участник(ов)

Группа для сетевых инженеров Создатель группы: @HelloSadness Админы: @darwinggl @mxssl @Sk1f3r @blademd @gngbng

RU.SYSADMIN — Олды здесь?
RU.SYSADMIN — Олды здесь?
1 616 участник(ов)

Ламповая конференция сисадминов! Правила: http://telegra.ph/Pravila-ru-sysadmin-12-01 Список интересных групп и каналов: https://github.com/goq/telegram-list

Pro Telecom
Pro Telecom
884 участник(ов)

Добро пожаловать, связисты! Запрещена реклама чатов Cообщество для своих - https://www.facebook.com/groups/protelecom/ https://vk.com/telecomrf

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

pro.enterprise
pro.enterprise
346 участник(ов)

Темы обсуждения: Сервера, системы хранения данных, hardware, software, сети хранения данных, сетевое оборудование, облачные инфраструктуры и никакой политики.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest