1
我需要从发件人的IP地址发送给我之后。我使用UDP套接字,所以发件人的IP地址会自动注册到sin_addr
结构中,因为我使用的是recvfrom()
函数。如何将sin_addr.S_un转换为char *?
如何操作sin_addr
结构并将其转换为char *
?
谢谢。
我需要从发件人的IP地址发送给我之后。我使用UDP套接字,所以发件人的IP地址会自动注册到sin_addr
结构中,因为我使用的是recvfrom()
函数。如何将sin_addr.S_un转换为char *?
如何操作sin_addr
结构并将其转换为char *
?
谢谢。
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;
而你的例子在技术上是正确的,但应注意的是,如果你不使用'char *'立即生成,您应该将其复制到您拥有的缓冲区中。 'inet_ntoa'通常返回一个指向内部静态分配数组的指针,这个数组在随后的调用中被覆盖。 – 2011-04-04 19:21:02
好点,[Evan Teran](http://stackoverflow.com/users/13430/evan-teran)。 – 2011-04-04 19:25:15
此外,inet_ntoa不是线程安全的,你可能想考虑inet_ntop而不是你的操作系统支持它,它允许你指定你自己的缓冲区而不是使用内部的静态的一个 – bdk 2011-04-04 19:27:44