如果我寫了一個服務器綁定到通配符地址(INADDR_ANY
),如何確定客戶端連接到哪個IP地址?如何確定接受後哪個IP地址正在使用?
我嘗試下面的代碼,當成功後接受呼叫,但它只是返回0.0.0.0。
inet_ntop(AF_INET, &server_address.sin_addr, s, sizeof(s));
如果我寫了一個服務器綁定到通配符地址(INADDR_ANY
),如何確定客戶端連接到哪個IP地址?如何確定接受後哪個IP地址正在使用?
我嘗試下面的代碼,當成功後接受呼叫,但它只是返回0.0.0.0。
inet_ntop(AF_INET, &server_address.sin_addr, s, sizeof(s));
正如How to determine IP used by client connecting to INADDR_ANY listener socket in C指出,使用getsockname,這將賦予您的連接綁定到套接字(地方級)。
這是爲C,但適用於C++來。
的接受系統調用將具有結構類型的sockaddr_in或結構的sockaddr_in6的一個地址。
客戶端地址將被存儲在那裏。
您可以使用INET_NTOA,或inet_ntop得到它。
的可能重複的[如何確定由客戶端連接到INADDR_ANY用C聽者插座使用的IP(http://stackoverflow.com/questions/3047704/how-to-determine-ip-used-by-client-connecting -to-inaddr-任何偵聽器插座中-c)的 – Jacob 2011-12-19 21:49:59