2010-08-25 41 views
5

Tôi đã tìm kiếm trên mạng các câu trả lời nhưng tôi dường như không thể tìm thấy câu trả lời hoàn chỉnh.boost :: asio - Làm rõ ràng ràng buộc với một giao diện mạng cụ thể

Tình huống: Tôi có API ứng dụng khách và máy chủ. Một ứng dụng sử dụng API ứng dụng khách để nói chuyện với máy chủ. Cả TCP và UDP đều được sử dụng để giao tiếp giữa API ứng dụng khách và máy chủ. Tất cả điều này đã được viết bằng ASIO.

API ứng dụng khách kết nối với máy chủ qua TCP, sau đó gửi lệnh qua TCP và nhận phản hồi qua TCP. API ứng dụng khách cũng lắng nghe một địa chỉ UDP, nơi nó nhận dữ liệu thời gian thực liên tục.

Môi trường là sự kết hợp của các máy chạy WIN32 và WIN64. Tất cả các máy cũng có 2 card mạng.

Câu hỏi: Tôi muốn có thể 'ghim' các kết nối TCP và UDP của tôi vào các giao diện mạng cục bộ cụ thể. Tôi đã thấy một số thông tin thảo luận về tùy chọn ổ cắm SO_BINDTODEVICE cũng như chức năng liên kết từ các bài đăng trước đó hoặc các trang web khác.

Có thể thực hiện điều này trong môi trường WIN32/64 không? Nếu bạn có thể làm sáng tỏ điều này, một số ví dụ, hoặc các trang web hữu ích tôi sẽ thực sự đánh giá cao nó.

Liên kết tôi đã tìm thấy:

  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

nó là không rõ ràng với tôi nếu bạn đã thử ràng buộc 'accepto của bạn r' đối tượng một 'điểm cuối' cụ thể bằng cách sử dụng một trong các hàm tạo quá tải. Bạn đã thử chưa –

+0

Sam - Tôi chưa thử quá trình khởi tạo quá tải. Tôi sẽ cố gắng tối nay và cho bạn biết. Âm thanh như nó nên làm các trick cho một máy chủ tcp. Tôi hy vọng sẽ làm điều này cho một khách hàng tcp, máy khách udp và máy chủ udp. Nếu họ có thể. Tôi có thể sử dụng phương pháp liên kết trên chúng không? Cảm ơn, sẽ đăng kết quả. – skimobear

+0

Tôi đã đăng câu trả lời dưới đây với một số mã mẫu, cung cấp cho nó một shot và cho tôi biết. –

Trả lời

8

Bạn có thể liên kết với một thiết bị đầu cuối cụ thể bằng cách sử dụng thích hợp 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, tôi đã thử nó và nó hoạt động hoàn hảo. Cảm ơn. – skimobear

Các vấn đề liên quan