如何从 getaddrinfo() 打印 IP 地址

2023-11-27

我正在尝试在 CentOS 6.4 上使用 C 语言的套接字。

LIST1 后面是我的代码。

我的代码从命令行获取主机名并成功使用 UDP 将数据报发送到服务器。

我想知道的是如何打印IP地址getaddrinfo()解决了192.168.10.1 format.

当我尝试打印 IP 地址分段时发生错误。

有谁知道如何修复此代码?

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>

int
main(int argc,char *argv[]){
    int sock;
    struct addrinfo hints,*res;
    int n;
    int err;
    if(argc != 2){
        fprintf(stderr,"Usage : %s dst \n",argv[0]);
        return 1;
    } 
    memset(&hints,0,sizeof(hints));
    hints.ai_family = AF_UNSPEC; 
    hints.ai_socktype = SOCK_DGRAM;
    err = getaddrinfo(argv[1],"12345",&hints,&res);
    if(err != 0){
        perror("getaddrinfo");
        printf("getaddrinfo %s\n",strerror(errno));
        printf("getaddrinfo : %s \n",gai_strerror(err));
        return 1;
    }

    sock = socket(res->ai_family,res->ai_socktype,0);
    if(sock < 0){
        perror("socket");
        return 1;

        const char *ipverstr;
        switch (res->ai_family){
            case AF_INET:
                ipverstr = "IPv4";
                break;
            case AF_INET6:
                ipverstr = "IPv6";
                break;
            default:
                ipverstr = "unknown";
                break;            
        }
        printf("ipverstr = %s\n ",ipverstr);            
    }
    n = sendto(sock,"HELLO",5,0,res->ai_addr,res->ai_addrlen);
    if(n<1){
        perror("sendto");
        return 1;
    }
    struct sockaddr_in *addr;
    addr = (struct sockaddr_in *)res->ai_addr; 
    printf("inet_ntoa(in_addr)sin = %s\n",inet_ntoa((struct in_addr)addr->sin_addr));

    printf("############ finish !! #######\n");
    close(sock);
    freeaddrinfo(res);
    return 0;
}

该代码缺少包含原型inet_ntoa().

编译器应该告诉你这一点。

Do add:

#include <arpa/inet.h>

然而,由于缺少原型,代码仍然可以编译inet_ntoa()假设返回int,而它返回一个char*这是一个指针,在 64 位系统上是 8 个字节,与int其大小通常为4。由于这种不匹配,事情会变得非常错误并最终导致分段违规。


另请注意:inet_ntoa()仅用于 ipv4 地址。逐字来自man inet_ntoa(斜体是我写的):

The inet_ntoa()函数将以网络字节顺序给出的互联网主机地址转换为字符串IPv4点分十进制表示法。该字符串在静态分配的缓冲区中返回,后续调用将 覆盖


能够同时转换(IPv4 和 IPv6)struct sockaddr_XYZ的二进制地址到achar[] use inet_ntop().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 getaddrinfo() 打印 IP 地址 的相关文章

  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • 必须打开存储才能执行此操作 - System.IO.Packaging.Package

    我正在使用 System IO Packaing Package 类来压缩文件 我的应用程序的多个实例可以同时运行 并读取和保存文件 当处理小文件时 一切似乎都很好 但是当涉及大文件时 如果应用程序的两个实例同时保存 我会收到一个异常 消息
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • C# 中附加/分离事件处理程序的不同方式有什么区别

    我的问题有两个部分 首先 我们可以通过以下两种方式附加事件处理程序 myObject MyEvent new EventHandler MyHandler myObject MyEvent MyHandler 据我了解 这两者是等价的 在第
  • 为什么假设 send 可能返回的数据少于在阻塞套接字上传输的请求数据?

    在流套接字上发送数据的标准方法始终是调用 send 并写入一大块数据 检查返回值以查看是否发送了所有数据 然后再次调用 send 直到整个消息被接受 例如 这是一个常见方案的简单示例 int send all int sock unsign
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 从包含大量文件的目录中检索文件

    我的目录包含近 14 000 000 个 wav 格式的音频样本 所有普通存储 没有子目录 我想循环浏览文件 但是当我使用DirectoryInfo GetFiles 在该文件夹上 整个应用程序冻结了几分钟 可以用另一种方式完成吗 也许读取
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url

随机推荐

  • XAPK 文件验证显示正确的数据信息

    在运行 APK 扩展文件示例时 我只是跳过了检查 CRC32 以避免 crc bug 算法 并且它工作得非常好 但是 虽然 XAPK 文件验证显示正确的下载数据信息为 99 如何避免这种情况并通过硬编码查看完整的 100 这不是最好的解决方
  • 仅选择启动首选项复选框中的一个复选框

    我的应用程序启动取决于用户偏好 具有三个不同的复选框 1 启动应用程序 没有启动画面和音乐 2 仅使用启动画面启动应用程序 3 启动带有启动画面和音乐的应用程序 使用下面的代码可以完美地工作 但仍有两点需要实现 FIRST只应选中一个复选框
  • Git 中的 tree-ish 是什么意思?

    我很困惑如何使用git archive 我有一个带有文件夹的 git 存储库Foo Bar and Baz在顶层 我需要导出文件夹Foo以类似 SVN 的方式进行快速测试部署 我了解到我可以使用git archive in an 类似 SV
  • Get-ChildItem 无法找到路径,因为它不存在

    我正在编写一个脚本来获取网络中所有共享的 ACL 我正在三个独立的 UNC 路径上运行它 三者中的两个工作正常 返回所有子项目和权限等 但是 第三个 UNC 路径返回以下错误 Get ChildItem Cannot find path s
  • 将十进制向量转换为二进制向量

    我需要将十进制数转换为二进制向量 例如 这样的事情 length de2bi length field 16 不幸的是 由于许可的原因 我无法使用此命令 是否有任何快速的简短技术可以将二进制转换为向量 这就是我正在寻找的 If Data 1
  • Spring ResponseEntity:使用构造函数还是静态构建器?

    在 Spring Boot RestController 中 我使用 springframework 类响应实体返回端点调用的响应 我最近发现有两种方法可以实例化这个类 使用构造函数 response new ResponseEntity
  • 使用 PowerShell 远程运行 Java

    当我跑步时电源外壳在远程会话中 etsn servername 我有时似乎无法运行Java进程 即使是最简单的 chi queuing PS C temp gt java cp hello jar Hello Error occurred
  • 不提示使用 OAUth2 重新进行身份验证。为什么以及如何强制它?

    我想了解一些事情 我有一个基于 oAuth2 和 Google 帐户的应用程序 因此 当我第一次连接到该网站时 我会被重定向到 Google 域上的身份验证页面 因此 我输入我的电子邮件和密码 但没有选中 受信任的计算机 或 记住我 我不记
  • 去除QComboBox listView阴影效果

    默认情况下 QComboBoxlistview有阴影效果 有办法去除吗 阴影是否由QStyle或者以其他方式 阴影效果不是 Qt 特定的东西 它是桌面主题特定的东西 阴影取决于您的桌面环境使用的样式 主题 如果您的样式 主题定义了 QCom
  • 使用java创建XML文件

    如何使用java创建一个xml文件并将其保存在我的机器中的某个位置 xml文件中还包含属性 我找到了 org w3c dom Document 但在为元素创建属性和保存 xml 文件时遇到问题 谢谢 您可以使用 DOM XML 解析器通过
  • MongoDB 使用外键将字段复制到另一个集合

    我想将颜色从用户集合复制到汽车集合 我使用的是外键 即 userID gt db test1 User find id ObjectId 515f7db83f71d6bcb1c41a48 age 33 Color blue id Objec
  • 什么时候应该使用 UserControl 而不是 Page?

    我注意到许多 WPF MVVM 框架似乎避免使用 NavigationWindow 和 Page 控件 而转而使用嵌套的 UserControls 来编写页面 NavigationWindow 和 Page 提供了在日志中启用后退和前进导航
  • 一对一:未定义的方法构建

    一对一关系有问题 我有一些比赛 我想为一场比赛获得一个分数 我的比赛 rb has one score dependent gt destroy 我的分数 rb belongs to match 我的 Scores controller r
  • 重新审视 Firefox 按钮行高错误...2011 年有任何解决方案吗?

    The Firefox行高错误是一个痛苦 简而言之 它可以防止手动设置line height on button通过浏览器样式的元素line height normal important不可撤销的声明 现在这是一个巨大的痛苦 幸运的是 在
  • 如何在 java/JDBC 中取消 postgres 查询

    如何通过 JDBC 或 Java 取消长时间运行的 postgres 查询 用例是用户在 postgres 数据库上启动查询 通过前端 但随后他又做出了决定并想要 中止 取消当前正在运行的查询 Call java sql PreparedS
  • Android 库项目中的 R.java 文件未导入到应用程序项目中

    我按照此处有关如何创建 Android 库项目并在 Android 应用程序中使用它的说明进行操作 http developer android com guide developing eclipse adt html 但它不起作用 我可
  • Visual Studio:将 C# 代码导出到 PDF 文件并保留格式和颜色?

    我想知道里面有没有导出功能Visual Studio Ultimate 2010 得到一个选择tab 默认情况下单个class of C code导出到一个PDF文件 以便您可以共享该 PDF 文件并向其他人展示代码以及 Visual St
  • 在sql server中参数化全文查询

    我在使用 sql server 全文功能时遇到问题 我正在将一些论坛软件转换为使用全文搜索 并且我已完成所有设置并正常工作 我的问题与全文查询有关 我设计了一些查询 当我使用 CONTAINS 谓词在 sql server manageme
  • WPF:XAML 中的绑定列表 - 项目如何知道其在列表中的位置?

    给定以下具有 ListControl 类似行为的 XAML 代码
  • 如何从 getaddrinfo() 打印 IP 地址

    我正在尝试在 CentOS 6 4 上使用 C 语言的套接字 LIST1 后面是我的代码 我的代码从命令行获取主机名并成功使用 UDP 将数据报发送到服务器 我想知道的是如何打印IP地址getaddrinfo 解决了192 168 10 1