Python网络编程——主机字节序和网络字节序之间的相互转换

If you ever need to write a low-level network application, it may be necessary to handle the low-level data transmission over the wire between two machines. This operation requires some sort of conversion of data from the native host operating system to the network format and vice versa. This is because each one hat its own specific representation of data.

编写底层低层网络应用时,或许需要处理通过电缆在两台设备之间传送的低层数据。在这种操作中,需要把主机操作系统发出的数据转换成网络格式,或者做逆向转换,因为这两种数据的表示方式不一样。

1. 代码

 1 # 主机字节序和网络字节序之间的相互转换
 2
 3 import socket
 4
 5
 6 def convert_integer():
 7     data = 1234
 8     # 32-bit
 9     print("Original: %s => Long host byte order: %s, Network byte order: %s"
10           % (data, socket.ntohl(data), socket.htonl(data)))
11     # 16-bit
12     print("Original: %s => Short host byte order: %s, Network byte order: %s"
13           % (data, socket.ntohs(data), socket.htons(data)))
14
15 if __name__ == ‘__main__‘:
16     convert_integer()

2. ntohl()、ntohs()、htonl()和htons()解释

 1 def ntohl(integer):  # real signature unknown; restored from __doc__
 2     """
 3     ntohl(integer) -> integer
 4
 5     Convert a 32-bit integer from network to host byte order.
 6     """
 7     return 0
 8   # 将网络字节顺序转换成主机字节顺序(32bit)
 9
10 def ntohs(integer):  # real signature unknown; restored from __doc__
11     """
12     ntohs(integer) -> integer
13
14     Convert a 16-bit integer from network to host byte order.
15     """
16     return 0
17   # 将网络字节顺序转换成主机字节顺序(16bit)
18
19 def htonl(integer):  # real signature unknown; restored from __doc__
20     """
21     htonl(integer) -> integer
22
23     Convert a 32-bit integer from host to network byte order.
24     """
25     return 0
26   # 将主机字节顺序转换成网络字节顺序(32bit)
27
28 def htons(integer):  # real signature unknown; restored from __doc__
29     """
30     htons(integer) -> integer
31
32     Convert a 16-bit integer from host to network byte order.
33     """
34     return 0
35   # 将主机字节顺序转换成网络字节顺序(16bit)

3.网络字节顺序和主机字节顺序解释

网络字节顺序NBO(Network Byte Order): 按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。

主机字节顺序(HBO,Host Byte Order): 不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。
如 Intel x86结构下, short型数0x1234表示为34 12, int型数0x12345678表示为78 56 34 12
如 IBM power PC结构下, short型数0x1234表示为12 34, int型数0x12345678表示为12 34 56 78
时间: 2024-10-05 23:58:21

Python网络编程——主机字节序和网络字节序之间的相互转换的相关文章

UNIX网络编程-recv、send、read、write之间的联系与区别

1.read ----------------------------------------------------------------------- #include <unistd.h> ssize_t read(int fd, void *buf, size_t nbyte); ----------------------------------------------------------------------- read()函数是负责从fd中读取内容.当读成功时,read(

java 网络编程-(1)引入网络编程

网络编程现在是非常普遍的编程技术了,网络编程无非就是两台或者多台设备(通常是计算机)之间的相互通信,相互之间的数据传输.网络编程的实质其实就是程序和程序之间的相互通信,相互传递数据.在网络通信中,第一次主动发起通信请求的成为客户端(Client),第一次通信中等待连接的称为服务器端(Server),在网络通信的过程中,Client端和Server端没有本质的区别. 那么,怎样才能通过客户端找到服务器从而进行网络通信呢?答案就是通过ip来找到服务器,我们都知道,服务器上运行着多个程序,也就是多个进

Python并发编程03/僵尸孤儿进程,互斥锁,进程之间的通信

目录 Python并发编程03/僵尸孤儿进程,互斥锁,进程之间的通信 1.昨日回顾 2.僵尸进程和孤儿进程 2.1僵尸进程 2.2孤儿进程 2.3僵尸进程如何解决? 3.互斥锁,锁 3.1互斥锁的应用 3.2Lock与join的区别 4.进程之间的通信 进程在内存级别是隔离的 4.1基于文件通信 (抢票系统) 4.2基于队列通信 Python并发编程03/僵尸孤儿进程,互斥锁,进程之间的通信 1.昨日回顾 1.创建进程的两种方式: 函数, 类. 2.pid: os.getpid() os.get

Python 网络编程socket大全 用途---用于客户端和服务器端之间相互通讯

本章目录 一.什么是socket 二.为什么需要socket 三.socket的发展 四.python中的socket 五.基于TCP的socket 六.基于UDP的socket 六. 粘包问题详解 七.粘包的解决方案 八.socketserver实现并发通讯 **引入:为什么一定要先学习网络协议?** 之所以学习网络编程就是为了让我们的程序能够利用网络来传输数据,开发出C/S构架的应用程序 而网络的核心,就是协议,没有协议就没有互联网,我们要开发出C/S结构程序则必须遵循这些协议的标准! `就

嵌入式 Linux网络编程(一)——Socket网络编程基础

嵌入式 Linux网络编程一--Socket网络编程基础 一.Socket简介 1.网络中进程间通信 本机进程使用进程号区别不同的进程进程间通信方式有管道.信号.消息队列.共享内存.信号量等.网络中进程间的通信首先需要识别进程所在主机在网络中的唯一标识即网络层的IP地址主机上的进程可以通过传输层的协议与端口号识别. 2.Socket原理 Socket是应用层与TCP/IP协议族通信的中间软件抽象层是一种编程接口.Socket屏蔽了不同网络协议的差异支持面向连接(Transmission Cont

[C#网络编程系列]专题一:网络协议简介

原文地址:http://blog.csdn.net/learning_hard/article/details/9004936 一.网络分层 网络上的计算机之所以可以互相通信,是因为它们之间都遵守互相都可以"认识"的互联网协议(就如同人交流一样,两个人能够交流,互相必须知道对象的语言),互联网上的计算机互相通信又归根于网络中层与层之间的通信,OSI模型把网络通信分成七层:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,对于开发网络应用人员来说,一般把网络分成五层,这样比较容

Java网络编程和NIO:Java网络编程基础

转自: https://www.cnblogs.com/midiyu/p/7875574.html 关于网络 网络协议 如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议. 网络体系结构 计算机网络是个复杂的系统,按照人们解决复杂问题的方法,把计算机网络实现的功能分到不同的层次上,层与层之间用接口连接.通信的双方具有相同的层次,层次实现的功能由协议数据单元(PDU)来描述.不同系统中的同一层构成对等层,对等层之间通过对等层协议进行

ios网络编程(一)之网络请求

小知识: 1, HTTP协议,Hyper Text Transfer Protocol(超?本传输协议)是?于从万维?服务器传送超?本到本地浏览器的传输协议,HTTP是 ?个应?层协议,由请求和响应构成,是?个标准的客户端服务器模型. 2,url,统?资源定位符,也被称为?址,因特?上标准的资源?址 url的符语法: 协议://授权/路径?查询 协议:ftp://(?件传输协议) http://(超?本传输协议) https://(安全超文本传输协议) file://(本地文件协议) 3,ios

linux网络编程基础--(转自网络)

转自 http://www.cnblogs.com/MyLove-Summer/p/5215287.html Linux下的网络编程指的是socket套接字编程,入门比较简单. 1. socket套接字介绍 socket机制其实就是包括socket, bind, listen, connect, accept等函数的方法,其通过指定的函数实现不同的协议(IP4,IP6等)的数据在不同层之间的传输和获取等处理.其实个人理解socket就是处于应用层和TCP/IP协议之间的一个中间层,具体的数据分析