2010-08-25 3 views
5

Ich habe das Netz nach Antworten gesucht, aber ich kann nicht scheinen, eine vollständige Antwort zu finden.boost :: asio - Klärung der Bindung an eine bestimmte Netzwerkschnittstelle

Szenario: Ich habe eine Client-API und einen Server. Eine Anwendung verwendet die Client-API, um mit dem Server zu kommunizieren. TCP und UDP werden für die Kommunikation zwischen der Client-API und dem Server verwendet. All dies wurde mit ASIO geschrieben.

Die Client-API verbindet sich über TCP mit dem Server, sendet Befehle über TCP und empfängt Antworten über TCP. Die Client-API überwacht auch eine UDP-Adresse, wo sie kontinuierlich Echtzeitdaten empfängt.

Die Umgebung ist eine Mischung aus Maschinen mit WIN32 und WIN64. Alle Maschinen haben auch 2 Netzwerkkarten.

Frage: Ich möchte meine TCP- und UDP-Verbindungen an bestimmte lokale Netzwerkschnittstellen "anheften" können. Ich habe einige Informationen gesehen, die die SO_BINDTODEVICE Socket-Option sowie die Bind-Funktion von früheren Posts oder anderen Seiten diskutiert.

Ist es möglich, dies in der WIN32/64-Umgebung zu tun? Wenn Sie etwas Licht auf dieses, einige Beispiele oder Seiten werfen könnten, die hilfreich sind, würde ich es wirklich schätzen.

Links Ich habe festgestellt:

  1. Using Linux, how to specify which ethernet interface data is transmitted on
  2. http://tuxology.net/2008/05/15/forcing-connections-through-a-specific-interface/
+0

es nicht offensichtlich unter Verwendung war zu mir, wenn Sie versucht haben, Ihr 'accepto zu binden r 'Objekte und ein spezifischer' Endpunkt 'mit einem der überladenen Konstruktoren. Hast du das probiert? –

+0

Sam - Ich habe den überladenen Konstruktor nicht ausprobiert. Ich werde es heute Abend versuchen und dich wissen lassen. Klingt wie es für einen TCP-Server tun sollte. Ich hoffe, dies für einen Tcp-Client, Udp-Client und UDP-Server zu tun. Wenn sie möglich sind. Kann ich die Bind-Methode auch für sie verwenden? Danke, werde das Ergebnis veröffentlichen. – skimobear

+0

Ich habe unten eine Antwort mit einem Beispielcode gepostet, gebe einen Tipp und lass es mich wissen. –

Antwort

8

Sie an einen bestimmten Endpunkt binden kann die geeignete tcp::ip::acceptorconstructor

include <boost/asio.hpp> 

int 
main() 
{ 
    using namespace boost::asio; 
    io_service service; 
    ip::tcp::endpoint ep(
      ip::address::from_string("127.0.0.1"), 
      1234 
      ); 
    ip::tcp::acceptor acceptor( 
      service, 
      ep 
      ); 
} 
+0

Sam, ich habe es ausprobiert und es funktioniert perfekt. Vielen Dank. – skimobear