2011-04-04 85 views
1

我需要从发件人的IP地址发送给我之后。我使用UDP套接字,所以发件人的IP地址会自动注册到sin_addr结构中,因为我使用的是recvfrom()函数。如何将sin_addr.S_un转换为char *?

如何操作sin_addr结构并将其转换为char *

谢谢。

回答

3

inet_ntoa

struct sockaddr_in in_sa; 
char* ip_addr_text = inet_ntoa(in_sa.sin_addr); 

如果你想保留以备后用,你应该做一个副本,例如:

std::string ip_txt(inet_ntoa(in_sa.sin_addr)); 
// other stuff 
std::cout << ip_txt << std::endl; 
+2

而你的例子在技术上是正确的,但应注意的是,如果你不使用'char *'立即生成,您应该将其复制到您拥有的缓冲区中。 'inet_ntoa'通常返回一个指向内部静态分配数组的指针,这个数组在随后的调用中被覆盖。 – 2011-04-04 19:21:02

+0

好点,[Evan Teran](http://stackoverflow.com/users/13430/evan-teran)。 – 2011-04-04 19:25:15

+0

此外,inet_ntoa不是线程安全的,你可能想考虑inet_ntop而不是你的操作系统支持它,它允许你指定你自己的缓冲区而不是使用内部的静态的一个 – bdk 2011-04-04 19:27:44