【问题标题】:c++ string to ipAddress windows/unix systemc++字符串到ipAddress windows/unix系统
【发布时间】:2011-07-19 16:16:38
【问题描述】:

我可以在多个平台上的C++中将字符串转换为IP地址吗 Windows(各种版本)和 Unix 系统?

【问题讨论】:

  • 您到底需要什么...您必须将字符串转换为以这种方式 xxx.xxx.xxx.xxx 格式的字符串?
  • 不清楚你到底想要什么。这个字符串是什么?主机名或 IP 地址,还是...?

标签: c++ windows string unix ip-address


【解决方案1】:

如果您有主机名或 FQDN,并且需要 DNS 查询或内部主机列表查询将其转换为 IP 地址,那么您需要使用 gethostbyname

【讨论】:

    【解决方案2】:

    您可以使用inet_addr() 函数将表示为字符串的IP 地址转换为可与其他套接字函数一起使用的形式。

    这是一个使用示例(取自here):

    int rc;
    int s;
    struct sockaddr_in myname;
    
    /* clear the structure to be sure that the sin_zero field is clear */
    memset(&myname, 0, sizeof(myname));
    myname.sin_family = AF_INET;
    myname.sin_addr = inet_addr("129.5.24.1");
    /* specific interface */
    myname.sin_port = htons(1024);
    

    【讨论】:

    • 我必须编写适用于 Windows 和 UNIX 系统的代码。这个以前不能知道。如何更改此代码?
    • 我必须包含什么才能在 Windows 和 Unix 系统上使用此代码?
    • @GgSalent:Windows 和 *NIX 的包含不同。在 Windows 上,它可能是 <winsock2.h>,在 *NIX 上可能是 <sys/socket.h>。您仍然可以使用预处理器条件提供“可移植”代码,例如:#ifdef __WIN32__
    • 我这样做了,但我有很多错误..我已经包含了所有内容?我这个时候用的是Windows XP #ifdef WIN32 #include #include #else #include #include #include #include #endif
    • 根据记忆,我认为您需要在windows.h 之前包含winsock2.h。 (另外我认为winsock2.hwinsock.h 是不兼容的,所以也要小心!- 第一次尝试这些东西时真的很痛苦。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2011-01-09
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多