社区
Linux/Unix社区
帖子详情
为什么发送§接受数据的时候不考虑网络字节序的问题?
jingyueid
2005-12-29 11:32:15
如题,甚感困惑。
socket 在 bind 到端口的时候,甚至都会把端口数值用htons()设置为网络字节序。
而在进行write和read操作的时候,肯本却不考虑网络自己序的问题,为什么??
端口数值设置为网络字节序,我可以理解为ip封装的需要,write和read为什么没有进行网络字节排序?
在线等。
...全文
209
7
打赏
收藏
为什么发送§接受数据的时候不考虑网络字节序的问题?
如题,甚感困惑。 socket 在 bind 到端口的时候,甚至都会把端口数值用htons()设置为网络字节序。 而在进行write和read操作的时候,肯本却不考虑网络自己序的问题,为什么?? 端口数值设置为网络字节序,我可以理解为ip封装的需要,write和read为什么没有进行网络字节排序? 在线等。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fierygnu
2005-12-29
打赏
举报
回复
write和read也要考虑字长、字节序的问题,但是需要程序员自己考虑,socket接口不处理。
lcl118
2005-12-29
打赏
举报
回复
嘿嘿,感觉说的有点过。
我想说, moto的cpu也可能是用 little-endian, 这样,就不需要转换。
建议 使用 htonl/ntohl系列函数 书写字节序无关代码。
lcl118
2005-12-29
打赏
举报
回复
提醒楼主一下:
定义big-endian和little-endian是为了满足不同CPU架构对bit流的处理差别。反映到代码级别上,是 当cpu存储 某种类型 的数据(如int,long,struct) 到memory上的时候,数据的最低位在低地址还是高地址;读取的时候(即将连续的数据转换为类型的时候),将低地址看成该数据的高位还是地位。
所以,“server如果是moto的unix,而client是ia32的windows的话?
在C编码级上,不得不需要把所传输的结构内的int,long都修改为网络字节序,而客户端也不的不把网路字节序修改为本地字节序,就像对port所做的操作一样。”
中,将 字节序 跟 操作系统 挂钩,很危险哦
fierygnu
2005-12-29
打赏
举报
回复
对。read和write面向的是字节流,不能对内容做假设,所以不能做字节序转换,因此要应用自己处理。
jingyueid
2005-12-29
打赏
举报
回复
这种应用应该是不考虑平台的。
server如果是moto的unix,而client是ia32的windows的话?
在C编码级上,不得不需要把所传输的结构内的int,long都修改为网络字节序,而客户端也不的不把网路字节序修改为本地字节序,就像对port所做的操作一样。
我认为应该要这样做才对。
fierygnu
2005-12-29
打赏
举报
回复
发送和接收方要约定的,这就是应用协议的一部分。
就象你说,收到的是字节流,字节流的内容是需要应用解析的,应用知道字节流使用的字节序(应用协议规定的)。
jingyueid
2005-12-29
打赏
举报
回复
假设结构
struct sample_type{
int _val1;
long _val2;
char _val3;
};
struct sample_type a;
a._val1 = 1;
a._val2 = 3L;
a._val3 = \'a\';
write( socket_descriptor, &a, sizeof(a) ) /* 接受方收到的是个字节流,
big endian和little endian所产生的结构体根本就不一样,那么怎么办??? */
...
read和write把所操作的buffer做为一个字节流来对待,根本就忽略了buffer所指向的数据结构,如何能完成 网络字节序 转换?????
--------------
best regards
计算机
网络
第三章:
数据
链路层
§
3.1
数据
链路层功能概述 1.节点: 计算机
网络
中的中的主机路由器等都可以叫节点。 2.链路:
网络
中两个节点之间的物理通道,链路的传输介质主要有双绞线光纤和微波。分为有线链路、无线链路。 3.
数据
链路:
网络
中两个节点之间的逻辑通道,把实现控制
数据
传输协议的硬件和软件加到链路上就构成了
数据
链路。 4.帧: 链路层的协议
数据
单元,封装
网络
层
数据
报。 5.链路与
数据
链路之间的区别: 链路是物理通道、而
数据
链路是逻辑通道。
数据
链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻
电子科大计网期末复习之套接字编程
PF是protocol family,AF是address family,TCP/IP套接字设计者认为可能某个协议族有多种形式的地址,所以在API上把它们分开了,创建socket用PF,bind/connect用AF。inet_addr进行相同的转换,但不进行有效性验证,也就是说,所有232种可能的二进制值对inet_addr函数都是有效的——
接受
收
数据
包时,则将
网络
字节序
转换为主机
字节序
。返回:若成功,返回32位二进制的
网络
字节序
地址,若有错,则返回INADDR_NONE。
浅析
数据
一致性
什么是
数据
一致性? 在
数据
有多分副本的情况下,如果
网络
、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的
数据
不一致,
数据
内容冲突。 实践中,导致
数据
不一致的情况有很多种,表现样式也多种多样,比如
数据
更新返回操作失败,事实上
数据
在存储服务器已经更新成功。CAP定理 CAP定理是2000年,由 Eric Brewer 提出来的。Brewer认为在分布式的环境下
计算机
网络
牛客网练习
计算机
网络
牛客网练习: 1. A类IP地址 一个A类IP地址由1字节的
网络
地址和3字节主机地址组成,
网络
地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类
网络
有126个,每个
网络
能容纳1亿多个主机。 2. B类IP地址 一个B类IP地址由2个字节的
网络
地址和2个字节的主机地址组成,
网络
地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.2...
Java 工程师面试题
网络
数据
结构
Java 工程师面试题
网络
数据
结构 1.栈和队列的共同特点是(只允许在端点处插入和删除元素) 4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构) 5.下列关于栈的叙述正确的是(D) A.栈是非线性结构B.栈是一种树状结构C.栈具有先进先出的特征D.栈有后进先出的特征 6.链表不具有的特点是(B)A.不必事先估计存储空间 B.可随机访问任一元素 C.插入删除不需要移动元素 D.所需空间...
Linux/Unix社区
23,120
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章