Windows XP 中的 inet_pton 或 InetPton 等价物是什么?

2024-04-07

我需要确定特定字符串是否是有效的 IPv4 或 IPv6 地址文字。如果我理解正确的话,在 POSIX 系统上执行此操作的正确方法是使用inet_pton将其转换为网络地址结构,看看是否成功。 Windows Vista 及更高版本有InetPton本质上做同样的事情。但据我所知,Windows XP 没有声明其中任何一个,而我需要能够在 XP 上正确执行此操作。那么,问题是使用什么系统函数来做到这一点?

最坏的情况是,我可以自己编写一个函数来解析它,但我更喜欢一个标准的系统函数,因此它经过了彻底的测试并正确处理所有极端情况等。微软不能仅仅宣布这一点已经够糟糕了inet_pton像其他人一样并与InetPton对于他们的新操作系统。


在 Windows XP 中您可以使用以下功能:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#include <winsock2.h>
#include <ws2tcpip.h>


int inet_pton(int af, const char *src, void *dst)
{
  struct sockaddr_storage ss;
  int size = sizeof(ss);
  char src_copy[INET6_ADDRSTRLEN+1];

  ZeroMemory(&ss, sizeof(ss));
  /* stupid non-const API */
  strncpy (src_copy, src, INET6_ADDRSTRLEN+1);
  src_copy[INET6_ADDRSTRLEN] = 0;

  if (WSAStringToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) {
    switch(af) {
      case AF_INET:
    *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr;
    return 1;
      case AF_INET6:
    *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr;
    return 1;
    }
  }
  return 0;
}

const char *inet_ntop(int af, const void *src, char *dst, socklen_t size)
{
  struct sockaddr_storage ss;
  unsigned long s = size;

  ZeroMemory(&ss, sizeof(ss));
  ss.ss_family = af;

  switch(af) {
    case AF_INET:
      ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src;
      break;
    case AF_INET6:
      ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src;
      break;
    default:
      return NULL;
  }
  /* cannot direclty use &size because of strict aliasing rules */
  return (WSAAddressToString((struct sockaddr *)&ss, sizeof(ss), NULL, dst, &s) == 0)?
          dst : NULL;
}

就是这样。与 ws2_32 库链接。

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

Windows XP 中的 inet_pton 或 InetPton 等价物是什么? 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • Visual Studio 格式化整个文件?

    有没有办法在 VS2008 中使用 CodeRush Express 发出关键命令来正确格式化整个文件 Use Ctrl K Ctrl D to format document keystroke Use Ctrl K Ctrl F to
  • 如何解释TensorFlow的卷积滤波器和跨步参数?

    我正在尝试了解 TensorFlow卷积 http www tensorflow org api docs python nn md convolution 特别是公式 shape output batch in height filter
  • 如何在一行中打印 numpy.array?

    我测试了 PyCharm 和 IDLE 它们都将第 7 个数字打印到第二行 Input import numpy as np a np array 1 02090721 1 02763091 1 03899317 1 00630297 1
  • 使用 rake 任务重置数据库

    我想使用 Heroku 的调度程序 https devcenter heroku com articles scheduler每天重置我的数据库一次 建议对调度程序使用 rake 任务 这是我尝试过的 task reset database
  • 创建一组链接的项目

    有一个购买不同产品的用户列表 我想按用户购买行为对商品进行分组 如果任何用户购买两个产品 则这些产品应属于同一组 购买链接产品 user item 1 cat food 1 cat toy 2 cat toy 2 cat snacks 10
  • Android:使列表视图顶部的视图与列表视图一起滚动

    我有一个显然可以滚动的列表视图 列表视图包含一些表单问题 一旦用户提交表单 我们就会在列表视图的顶部放置一个类似邮票的自定义视图 并阻止用户回答问题 但这在这里并不重要 邮票应该出现在列表视图的顶部 如屏幕顶部 并且可以以与列表视图相同的速
  • 使用 Groovy 从属性文件中获取值

    如何使用 Groovy 从属性文件中获取值 我需要一个属性文件 properties 其中文件名作为键 目标路径作为值 我需要在运行时解析密钥 具体取决于需要移动的文件 到目前为止 我可以加载看起来的属性 但无法从加载的属性中 获取 值 我
  • 由于地址已在使用错误,Activemq 无法运行

    如何解决错误 Java Runtime Oracle Corporation 1 7 0 05 E Program Files Java jdk1 7 0 05 jre Heap sizes current 1004928k free 99
  • 从文本字符串创建单词数组

    我想使用 PHP 将文本拆分为单个单词 您知道如何实现这一目标吗 我的做法 function tokenizer text text trim strtolower text punctuation a z0 9 result preg s
  • POSIX 标准对 atexit() 处理程序中的线程堆栈有何规定?操作系统的做法是什么?

    当我们的 UNIX C 程序需要紧急退出时 我们使用 exit 3 函数并安装 atexit 3 处理程序来进行紧急清理 这种方法工作得很好 直到我们的应用程序被线程化 此时 atexit 处理程序停止正常工作 我们通过试验了解到一个错误
  • 打印表达式并对其求值的宏(使用 __STRING)

    为了学习和演示 我需要一个打印其参数的宏and对其进行评价 我怀疑这是一个非常常见的案例 甚至可能是一个常见问题解答 但我找不到实际的参考资料 我当前的代码是 define PRINT expr fprintf stdout s gt d
  • 初始化成员变量

    我已经开始采用这种模式 template
  • 如何在 iphone safari 中检测照片/视频是从相机拍摄还是从相机胶卷导入

    在我的网站上我有一个file input标签上传照片 视频 当在 mobile safari 中打开网站并单击文件输入时 会打开一个包含 3 个选项的操作表take photo or Video choose Existing and ca
  • 正则表达式匹配日月和年

    我尝试了一些 Windows 日期格式 该格式依赖于区域设置 因此 为了匹配日 月和年 我开始使用正则表达式 我有一些非常基本的经验 我在Python中使用了正则表达式 我的日期格式是dd mm yyyy hh mm ss 为了匹配日 月和
  • HttpWebRequest 在授权标头中发送无参数 URI

    我正在从 NET 连接到 Web 服务 例如 var request HttpWebRequest WebRequest Create uri request Credentials new NetworkCredential usr pw
  • GXT 2.2 - 消息框按钮常量

    这是一个关于如何检测在 MessageBox Dialog 中单击了哪个按钮的问题 仅限 GX T 2 1 或 2 2 请不要使用 GXT 3 接听 理想情况下 这就是我进行确认对话框的方式 final MessageBox box Mes
  • Android KitKat HttpURLConnection 断开 AsyncTask

    在我的应用程序中 我使用下载文件HttpURL连接 http developer android com reference java net HttpURLConnection html in an 异步任务 http developer
  • 是否可以从 Django 请求检测浏览器刷新?

    是否可以在 Django 请求中检测用户的浏览器刷新 就其本身而言 我相信没有办法仅通过查看请求对象来知道页面是否已刷新 客户可以轻松打开该页面的第二个版本 您还必须保留有关所有请求的一些状态数据 以便比较时间戳等内容 但这只是对实际发生情
  • ASP.NET 2.0 会话超时

    已经有人在本论坛中提出了有关会话超时的问题 如果有人能再次澄清这一点 我将不胜感激 我有一个 asp net 2 0 应用程序 如果用户没有执行任何活动并按下页面上的按钮 他被重定向到 sessionExpired aspx 页面 那么 1
  • Windows XP 中的 inet_pton 或 InetPton 等价物是什么?

    我需要确定特定字符串是否是有效的 IPv4 或 IPv6 地址文字 如果我理解正确的话 在 POSIX 系统上执行此操作的正确方法是使用inet pton将其转换为网络地址结构 看看是否成功 Windows Vista 及更高版本有Inet