Boost Socket/Acceptor kan niet luisteren/verbinding maken op dezelfde poort?

Ik ben een beetje nieuw voor Boost, maar ik probeer een server te maken die verbindingen van een client op een bepaalde poort kan accepteren. Deze server moet ook naar de client op dezelfde poort kunnen schrijven.

Wanneer ik echter probeer beide te implementeren met acceptor_.bind() / acceptor_.listen() evenals socket_.connect (* iterator) de async_accept() mislukt met een ongeldige functiefout.

Als ik alleen acceptor_.bind() , acceptor_.listen() gebruik, kan ik schrijven naar de socket (van de server naar de client) met async_write() .

Als ik alleen socket_.connect() gebruik (maar reageer met de acceptor_.bind() , acceptor_.listen() ) ben ik in staat om te lezen uit de socket (gegevens verzonden van Client naar Server) met behulp van async_read_some() .

Moet ik een afzonderlijk socketobject maken of een andere poort kiezen? Ik heb een hergebruikadres ingeschakeld ingesteld op Waar.

1
in plaats van je code te beschrijven met woorden, plaats je complete code die het probleem beschrijft dat je beschrijft.
toegevoegd de auteur Sam Miller, de bron

2 antwoord

Waarom probeer je connect() te gebruiken voor een client die al op je server is aangesloten? Schrijf gewoon naar de bestaande socket die werd geaccepteerd voor die verbinding.

Als u connect() een tweede verbinding met een client moet hebben (zoals het FTP-protocol bijvoorbeeld doet voor gegevensoverdracht), geeft u dan geen poort op om die socket aan te binden. Laat het besturingssysteem een ​​geschikte poort kiezen om te gebruiken.

2
toegevoegd
Je had helemaal gelijk! Ik hoefde niet te luisteren en verbinding te maken, alleen verbonden en async lezen/schrijven werkt prima. Heel erg bedankt!
toegevoegd de auteur user_48349383, de bron

Het lijkt erop dat je enkele basisbegrippen van netwerkprogrammering niet begrepen hebt, dit is niet gerelateerd aan boost of de Asio-bibliotheek. In het algemeen spreken servers accept() aan en roepen clients connect() aan. De asio-voorbeelden laten dit in detail zien, zie

En merk op dat de server een beroep doet op

  • async_accept()
  • async_read_some()
  • async_write()

terwijl de klant zich beroept

  • connect()
  • write()
  • lees()
1
toegevoegd