我试图使用unix套接字测试发送一些udp数据包到localhost.

我的理解是,当设置ip地址和端口以便发送数据包时,我会将我的sockaddr_inwith填充为转换为网络字节顺序的值.

我在OSX上,我对此感到惊讶

printf("ntohl: %d\n", ntohl(4711));

printf("htonl: %d\n", htonl(4711));

printf("plain: %d\n", 4711);

打印

ntohl: 1729232896

htonl: 1729232896

plain: 4711

所以这两个函数都没有实际返回普通值.我希望看到结果不同,因为x86是little-endian(afaik),或者与实际数字4711相同且相同.显然我不明白htonl和ntohl及其变体的作用.我错过了什么?

相关代码是这样的:

int main(int argc, char *argv[])

{

if (argc != 4)

{

fprintf(stderr, "%s\n", HELP);

exit(-1);

}

in_addr_t rec_addr = inet_addr(argv[1]); // first arg is '127.0.0.1'

in_port_t rec_port = atoi(argv[2]); // second arg is port number

printf("Address is %s\nPort is %d\n", argv[1], rec_port);

char* inpath = argv[3];

char* file_buf;

unsigned long file_size = readFile(inpath, &file_buf); // I am trying to send a file

if (file_size > 0)

{

struct sockaddr_in dest;

dest.sin_family = AF_INET;

dest.sin_addr.s_addr = rec_addr; // here I would use htons

dest.sin_port = rec_port;

printf("ntohs: %d\n", ntohl(4711));

printf("htons: %d\n", htonl(4711));

printf("plain: %d\n", 4711);

int socket_fd = socket(AF_INET, SOCK_DGRAM, 0);

if (socket_fd != -1)

{

int error;

error = sendto(socket_fd, file_buf, file_size + 1, 0, (struct sockaddr*)&dest, sizeof(dest));

if (error == -1)

fprintf(stderr, "%s\n", strerror(errno));

else printf("Sent %d bytes.\n", error);

}

}

free(file_buf);

return 0;

}

htonl函数 c语言,c – 理解htonl()和ntohl()相关推荐

  1. htonl函数的功能_htons和htonl函数具体应用

    htons和htonl函数具体应用 htons和htonl函数,是用来将主机字节顺序转换为网络字节顺序 在进行网络抓包时,抓到的包的数据是网络字节顺序,在进行编程时,要进行主机字节顺序和网络字节顺序间 ...

  2. perm函数c语言_理解C语言(三) 字符串处理函数

    1 字符串基础 字符串是一种重要的数据类型,有零个或多个字符组成的有限串行. 定义子串: 串中任意个连续的字符组成的子序列,并规定空串是任意串的子串,任意串也是其自身的子串,如字符串"ade ...

  3. htonl函数的功能_htonl()函数详解

    在<Linux网络编程>这本书中提到htonl()函数的原型.实现代码如下: long htonl(long value) { return ((value <<24 )|(( ...

  4. c语言中htonl函数,htonl()函数学习

    今天在网上看到一篇关于htonl()函数的解释,感觉有道理,贴过来大家一起学习! htonl就是把本机字节顺序转化为网络字节顺序 h---host 本地主机 to  就是to 了 n  ---net ...

  5. 论文浅尝 - ACL2022 | 基于多语言语义解耦表示的跨语言迁移方法实现多语言阅读理解...

    论文作者:吴林娟,天津大学,研究方向为自然语言理解 论文链接:http://arxiv.org/abs/2204.00996 代码地址:https://github.com/wulinjuan/SSD ...

  6. C语言 文件读写 fseek 函数 - C语言零基础入门教程

    目录 一.fseek 函数简介 二.fseek 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fseek 函数简介 fse ...

  7. 解释型语言和编译型语言的区别_从泛型的使用情况看出你对语言的理解程度(2)...

    上篇我们提到:Java中的泛型是不可变的,可以通过<? extends E>实现了泛型的协变,<? super E>实现泛型的逆变.从泛型的使用情况看出你对语言的理解程度(1) ...

  8. Matlab中filter.m和filtfilt.m函数C语言实现

    一.一些基础知识 filter.m函数是依据z变换的一些知识进行的滤波方法. filtfilt.m则还有另一个名字是零相位滤波,顾名思义,通过filtfilt函数滤波后的信号,幅值会发生变化,但相位不 ...

  9. python语言中有哪些函数_Python语言中的函数

    本文主要向大家介绍了Python语言中的函数,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 学了 Python 中的数据类型,语句,接下来就来说一下 Python 中的函数,函数 ...

最新文章

  1. 什么时候可以全面升级鸿蒙系统,华为已做好全面升级准备,鸿蒙系统将替换底层安卓系统...
  2. [BZOJ1079][SCOI2008]着色方案 dp
  3. AJAX开发简略 (转)
  4. APT团伙是如何利用Windows热修复的?
  5. 都已经十岁的 Apache Dubbo,还能再乘风破浪吗?
  6. H3C 2126 限速后的问题
  7. mysql备份表恢复数据库_mysql备份恢复数据库据/表
  8. 无线网络技术基础 01
  9. mysql二分法查找亿行_算法——二分法查找(binarySearch)
  10. Debugview调试视图
  11. 28岁程序员期权过亿,彪悍从字节退休,网友:酸了酸了!
  12. python os.access_Python用access判断文件是否被占用的实例方法
  13. 入职体检的体检项目有哪些呢?
  14. yolov7训练自己的数据集
  15. 手算KMP算法next数组
  16. 1076: 三位数求解
  17. android usb uac,iBasso UAC
  18. 短视频配音的秘诀!你不会还在傻傻自己人声配音吧?
  19. 细数中国历史上的十大乱世枭雄(上)
  20. Ubuntu系统在终端查看一些软硬件版本或文件大小的指令!

热门文章

  1. 川农在线计算机应用答案,川农20春《计算机应用基础(专科)》离线考核
  2. 目前还存活的多个电驴下载站点
  3. 数字孪生技术为智慧城市的建设带来哪些帮助?
  4. 编译 cp2k 7.1 简略记录
  5. 电子招投标给企业带来的实用价值
  6. 3D建模在线展示/三维模型可视化线上VR智慧城市
  7. jewelcad教程(jewelcad教程下载)
  8. 数据结构之二叉树遍历经典题目
  9. ddos是什么意思?服务器怎么防御ddos?
  10. 三点求平面方程式的算法