簡體   English   中英

Boost asio socket:如何獲取IP,連接的端口地址?

[英]Boost asio socket: how to get IP, port address of connection?

我有一個使用boost asio的TCP服務器。 我接受了套接字連接。 如何獲取IP,我的服務器正在與之通信的機器端口?

順便說一句:是否有可能獲得有關連接服務器用戶看到我的server4機器的IP的信息?

您可以像這樣獲得IP和端口:

std::string sClientIp = socket().remote_endpoint().address().to_string();
unsigned short uiClientPort = socket().remote_endpoint().port();

如果你在remote_endpoint中收到Bad File Descriptor錯誤,你可以參考下面的鏈接。

http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/reference/basic_socket_acceptor/accept.html

“接受新連接並獲取對等端點。” 部分將對您有所幫助。

您可以使用如下

tcp::acceptor::endpoint_type end_type;
acceptor.accept(*stream.rdbuf(), end_type);
std::string sClientIp = end_type.address().to_string();

http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/reference/ip__tcp/endpoint.html

我沒有經驗,但它看起來像地址和端口成員函數應該做的伎倆

(編輯最新的Boost版本)

我不能評論原來的答案。 我只想提一下頂級投票答案存在一些問題: socket().remote_endpoint()可能會拋出boost::system::system_error 所以請記住處理異常或您的程序可能崩潰。 我花了很多時間來調試這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM