我试图使用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. 赠票 | 第三届语言与智能高峰论坛200个免费参会名额!
  2. DM8168 OpenCV尝试与评估(编译ARM版OpenCV)
  3. c#入门经典笔记第十章
  4. 安卓逆向_21 --- Java层和so层的反调试( IDA 动态调试 JNI_OnLoad、init_array下断)
  5. 作者:张鹏(1993-),男,国防科学技术大学并行与分布处理重点实验室硕士生...
  6. Maven学习总结(49)——Maven Profile详解
  7. 兼容firstChild和firstElementChild
  8. 怎么把git代码导入到本地仓库_git在本地仓库添加了一个tag,如何把这个tag同步到远程仓库?...
  9. 数据结构之链表(Linked list)
  10. 蓝桥杯Python初级组测试题之Turtle画图2
  11. Codeforces ~ 1063C ~ Dwarves, Hats and Extrasensory Abilities (交互题,二分)
  12. 【单片机毕业设计】【mcuclub-jj-013】基于单片机的衣柜的设计
  13. python3.5中import cv2报错
  14. 三星提出XFormer | 超越MobileViT、DeiT、MobileNet等模型
  15. C语言:输入三个整数,从小到大排序!
  16. (转)中国外包企业战略思考
  17. 物联网开发笔记(75)- 使用Micropython开发ESP32开发板之控制tm1637时钟数码管显示
  18. Robosense速腾激光雷达如何在线连接雷达并发送点云数据到ROS
  19. 浅谈Oracle数据库调优(1)
  20. mysql json 中文乱码_MySQL对JSON类型UTF-8编码导致中文乱码探讨

热门文章

  1. C++之spriintf函数(itoa函数)
  2. android studio 抽屉,Android Studio 的抽屉导航
  3. 王子的烦恼(c++)
  4. oracle 19c adg GAP恢复
  5. kalibr标定realsenseD435i(一)--imu标定
  6. 游戏服务器炸了多久能修复,DNF:腾讯游戏服务器炸了,仅仅几分钟玩家们却损失惨重...
  7. 企业团队建设与管理培训PPT模板
  8. 案例分析中可能的考点1:招投标程序
  9. 从数码照片中读取定位信息
  10. ibm服务器日常维护,《七小服公开课》IBM P780日常维护