htons 中的混乱 - 小端/大端

2023-11-22

当我通过套接字从一个进程向另一个进程发送一个整型变量,然后在接收端打印该值时,在不使用ntohl/htonl的情况下该值仍然相同,那么除了初始化套接字结构之外,我还需要在哪里使用这些函数。我理解小/大端。但是,当值保持不变时,为什么我们需要将端口号和 IP 号转换为主机/网络字节顺序。请详细解释一下整数是如何通过网络传输的?


如果您希望您的程序是可移植的,那么每当您通过网络发送大小大于 1 字节的整数时,您必须首先使用以下命令将其转换为网络字节顺序:htons or htonl,并且接收计算机必须使用将其转换为主机字节顺序ntohs or ntohl.

在您的情况下,该值仍然相同的原因可能是因为发送计算机和接收计算机具有相同的字节序。换句话说,您正在使用的发送计算机和接收计算机都是小尾数法(或大尾数法,无论是什么情况。)

但是,如果您希望您的程序具有可移植性,则不能指望情况总是如此。例如有一天,发送计算机可能是 Intel x86,接收计算机可能是 Sun SPARC,那么如果你不使用你的程序就会失败htons.

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

htons 中的混乱 - 小端/大端 的相关文章

  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • iOS16 Bug 键盘在关闭 SwiftUI 时破坏布局

    在 iOS16 中 工作表内部存在键盘的错误 当工作表关闭时键盘消失 没关系 但布局未更新 我只看到了关于同一问题的 1 个问题 想知道也许有人找到了临时解决方法 直到苹果不解决这个问题 重现代码 struct Test View Stat
  • 如何检查域名是否存在?

    不仅是 com 或 net 等简单的域名 还有 co uk fr gov rw 我真的应该做一个巨大的映射 tld 到相关的 whois 服务器 还是有更简单的方法 http php net manual en function check
  • 尝试查看项目属性时 Visual Studio 2008 中出现“未指定错误”

    当我将活动解决方案从 Win32 设置为 x64 时 我无法构建项目或查看属性 当我尝试构建我的项目时 它被跳过 当我尝试查看属性时 第一次尝试时没有任何反应 第二次 我收到一条错误消息 操作无法完成 未指定的错误 我正在运行 Visual
  • Int16 - .net 中的字节容量?

    为什么 short a 0 Console Write Marshal SizeOf a shows 2 但如果我看到 IL 代码 我会看到 1 IL 0000 ldc i4 0 2 IL 0001 stloc 0 3 IL 0002 ld
  • strftime 或仅 PHP 是否弃用了“美国/东部”、“美国/中部”和“美国/太平洋”?

    我有一个 shell 脚本 准确地说是 zsh 它使用 strftime I M p Z a b d EPOCHSECONDS 生成 当前时间 例如 中部标准时间 02 45 PM 3 月 1 日星期四 这需要能够显示几个不同的美国时区的时
  • 如何在 gdb 启动时加载 .gdbinit?

    这是一个看似微不足道的问题 但我找不到一个简单的方法来完成这个任务 我有我的 gdbinit文件定义在与 gdb exe 所在目录相同的目录中 即在我的编译器的 bin 目录中 但是 当我运行 gdb 时 我得到以下信息 GNU gdb G
  • 从实体框架返回自定义对象 并分配给对象数据源

    我需要一些有关问题的指导 我正在使用 Entity Framework 4 0 我有 DAL 和 BLL 并且绑定到页面上的 ObjectDataSource 我必须使用编写一个存储过程PIVOT和动态 SQL 以我想要的方式从多个实体返回
  • NETWORK_PROVIDER 的 LocationListener 已启用,但从未调用 onLocationChanged

    我正在开发一个应用程序 可以在服务中全天 6 和 6 分钟内获取手机的位置 它工作正常 但有时该方法OnLocationChanged网络提供商侦听器的停止被调用 我不知道为什么 由于某种原因 它停止被调用 但当我手动启用或禁用提供程序时
  • 使用 stringstream 浮动的字符串

    我在网上找到了这段代码作为模板 用于进行字符串到 float int double 转换 它只是在这里 所以我有一些可以参考的问题 我想让用户输入一个数字作为字符串 将其转换为浮点数 测试它是否成功 如果输入是 Q 则退出 或者如果不是 Q
  • 创建扩展方法来生成打开和关闭标签,例如 Html.BeginForm()

    我想知道是否可以创建一个具有与 Html BeginForm 类似的功能和行为的扩展方法 因为它会生成一个完整的 Html 标记 并且我可以在其中指定其内容 tags 例如 我可以有这样的视图 此功能在我尝试使用示例中生成的功能的上下文中非
  • 使用动态键在 Typescript 中动态创建对象,无需将类型扩展为 { [key: string]: T }

    动态对象键 无需扩展至 key string V 我正在尝试创建一个 Typescript 函数来生成一个具有动态键的对象 其名称在函数签名中提供 而返回类型不会扩展为 key string V 所以我想打电话 createObject t
  • 检测文件是否在批处理文件中打开

    假设我有一个用于执行长时间构建的批处理文件 最后它会创建一个 EXE 如果我忘记在开始构建之前关闭应用程序 则链接阶段会在无法重新创建 EXE 时失败 我想检查 EXE 是否在以下位置打开start构建的 我尝试将 EXE 文件重命名为自身
  • Python 与 Ruby 相比的限制:lambda

    我浏览了 WikiVS 的一些页面 我引用了这些页面 因为 Python 中的 lambda 仅限于表达式 不能 包含语句 我想知道这个限制的一个很好的例子 或更多 最好与 Ruby 语言相比 感谢您的回答 评论和反馈 我不认为你真的在问
  • 如何让 github 页面提供像 RFC5785 的 /.well-known/ 这样的点文件?

    我有一个从我的文档项目的 Github master 分支填充的文档网站 我想要https mydomain well known security txt提供以下文件tree master well known security txt
  • 在Java中设置图标图像

    我一直在到处搜索如何在 Java 中设置图标图像 但它总是以不起作用或给我错误 在这里 在我的主要方法中放置代码 public static void main String args Game game new Game This rig
  • 不使用互操作/非托管代码监控打印后台打印

    背景 我正在使用 NET 4 0 用 C 编写一个应用程序 它按一定顺序打印一堆文档 这些文档具有不同的类型 并且实际上是使用 ShellExecute 和 print 动词打印的 为了确保顺序不会混乱 我想检查相关打印机的打印队列 我的主
  • 使用 javascript 设置 maxlength

    我正在尝试使用 JavaScript 动态设置输入字段的最大长度 显然这是 IE 的问题 我找到了部分解决方案 input title get 0 setAttribute max length 25 input title get 0 s
  • 查找 .NET 解决方案中未使用的资源

    如何在 resx 文件中查找可能已成为 孤立 且不再需要的未使用的图标 图像 字符串 最近ResXManager 1 0 0 41添加了一项功能来显示对字符串资源的引用数量
  • LINQ、Where() 与 FindAll()

    有人可以解释 LINQ 函数Where 和FindAll 有何不同吗 他们俩似乎都在做同样的事情 FindAll 是一个函数List
  • htons 中的混乱 - 小端/大端

    当我通过套接字从一个进程向另一个进程发送一个整型变量 然后在接收端打印该值时 在不使用ntohl htonl的情况下该值仍然相同 那么除了初始化套接字结构之外 我还需要在哪里使用这些函数 我理解小 大端 但是 当值保持不变时 为什么我们需要