có một chút lạ với tôi rằng boost.asio không sử dụng khái niệm cơ bản khi ứng dụng khách kết nối với máy chủ - sử dụng địa chỉ IP và cổng. Có thể tôi là một chút noobie trong Boost - và tôi chấp nhận điều đó - nhưng dù sao tôi cũng không hiểu.
Vì vậy, tôi có mã như thế này để có được khách hàng kết nối đến máy chủ trên localhost:Cách boost.asio khám phá cổng nào là ứng dụng máy chủ của tôi đang nghe?
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query("localhost", "daytime");
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;
tcp::socket socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
while(error && endpoint_iterator != end) {
socket.close();
socket.connect(*endpoint_iterator++, error);
}
Windows trong WinSock của nó 2.0 sử dụng hai tham số - IP và cổng - để xác định các máy chủ.
Vì vậy, qurestion là - chính xác Asio phát hiện cổng nào là máy chủ đang nghe kết nối? Nó có quét tất cả các cổng không? Và, nếu có, điều gì sẽ xảy ra nếu hai máy chủ lắng nghe trên các cổng khác nhau cùng một lúc?
Tôi không hiểu rõ thông số thứ hai có nghĩa là gì trong truy vấn ctor. đầu tiên là địa chỉ IP mà tôi muốn kết nối, phải không? và ý nghĩa thứ hai là gì? – chester89
Tham số thứ hai là số cổng hoặc tên dịch vụ. Nếu đó là tên dịch vụ, asio sẽ tra cứu nó trong tệp dịch vụ để tìm số cổng thích hợp cho dịch vụ đó. Hãy xem các tập tin dịch vụ với một trình soạn thảo văn bản và bạn sẽ thấy nó hoạt động như thế nào. – Ferruccio
ok, sau đó làm thế nào tôi có thể bắt đầu một máy chủ trên một cổng tôi cần? mã cho điều đó ở phía máy chủ là: boost :: asio :: io_service io_service; tcp :: acceptor acceptor (io_service, tcp :: điểm cuối (tcp :: v4(), 13)); – chester89