pythonnet-网络编程(1)
2021-07-11 15:04
标签:之间 进入 pycharm cal 流式 参数 接收 返回 压缩优化 python的网络编程有不少难点,也容易忘记,最近我会陆续发出系统、完整pythonnet知识的博客,一边复习一边分享,感兴趣的可以关注我。 话不多说,开始吧。 网络编程 目的:数据的传输 ISO(国际标准化组织) OSI七层模型----->网络通信的标准化流程 应用层:提供用户服务,具体的内容由特定的程序规定 表示层:提供数据的加密和压缩优化 会话层:确定建立应用链接,选择传输服务 传输层:提供数据传输服务,进行流量控制 网络层:路由选择,网络互联 链路层:提供链路交换,具体消息的发送 物理层:物理硬件,接口,网卡的规定 可划分为四层模型 四层模型 应用层 传输层 网络层 物理链路层 划分为五层模型(TCP/IP模型) 应用层(应用层 表示层 会话层) 传输层 网络层 链路层 物理层 OSI模型的优点:将功能分开,降低网络传输中的耦合度,使开发流程更加清晰, 每部分各司其职。 高聚合:每个模块功能尽量单一,不会多个功能掺杂 低耦合:尽量降低每个模块之间的关联性 网络协议:在网络通信中协议各方必需遵守的规定。如建立什么连接,消息结构如何解析等。 应用层:TFTP HTTP DNS SMTP 传输层:TCP UDP 网络层:IP 物理层:IEEE 网络相关概念 网络主机:在网络上确定一台主机 本地使用:“localhost” 127.0.0.1 网络地址:"0.0.0.0" "172.60.50.54"(本机网络IP) 查看本机IP地址:ifconfig (linux) ipconfig (windows) ipython3 进入交互模式 通过计算机名获取匹配的IP socket.gethostbyname("localhost") "127.0.0.1" 获取本机的计算机名 socket.gethostname() "xxxx" IP地址 网络上确定一台主机的地址 IPv4:点分十进制 IPv6:128位 网络连接测试 ping 172.60.50.182 特殊IP 127.0.0.1 本地测试IP 0.0.0.0 自动使用本地可用网卡IP 192.168.1.0 代表当前网段 192.168.1.1 通常为网关地址 192.168.1.255 广播地址 IP地址转换为十六进制表达 socket.inet_aton(‘192.168.1.2‘) b‘\xc0\xa8\x01\x02‘ 域名:网络服务器地址在网络上的名称 端口号: 端口号是地址的一部分,在一个系统中每个网络应用监听不同的端口,以获取对应端口传递的信息 取值范围 : 1----65535 传输层服务 面向连接的传输服务 ---》 tcp协议 传输特征: 可靠的数据传输 在数据传输前和传输结束后需要建立连接和断开连接 三次握手 : 在面向连接的传输服务中建立连接的过程 1. 客户端向服务器发送连接请求 四次挥手 : 在面向连接的传输服务站断开连接的过程 1. 主动方发送报文,告知被动方要断开连接 应用情况 : 适用于传输较大的内容或文件,网络良好,需 要保证传输可靠性的情况 面向无连接的传输服务 ---》 udp协议 传输特点: 适用情况 : 网络情况可能产生丢包,对传输可靠性要求低 e.g. : 网络视频, 群聊,广播等 socket 套接字编程 目的 : 通过编程语言提供的套接字编程接口,可以更简单的完成基于tcp和udp的编程 套接字 : 完成上述目标的一种编程手段 套接字类别 流式套接字(SOCK_STREAM):传输层基于tcp的协议通信 数据报套接字(SOCK_DGRAM): 传输层基于udp协议传输 底层套接字 (SOCK_RAM): 访问底层协议套接字 import socket 1. 创建套接字 socket.socket(sock_family = AF_INET, 2. 绑定地址 sockfd.bind(addr) 3. 设置监听套接字 sockfd.listen(n) * 一个监听套接字可以连接多个客户端 4. 等待接受客户端连接 connfd,addr = sockfd.accept() 5. 消息的收发 data = connfd.recv(buffersize) n = connfd.send(data) 6. 关闭套接字 sockfd.close() * telnet ip port 客户端 1. 创建套接字 (和服务端套接字类型相同) connect(addr) 3. 消息收发 下面看代码,此为客户端代码 此为服务端代码: 好了,本小节完,小伙伴们可以使用pycharm(社区版免费)运行试试看,我们下次见! pythonnet-网络编程(1) 标签:之间 进入 pycharm cal 流式 参数 接收 返回 压缩优化 原文地址:https://www.cnblogs.com/python-sl/p/9550942.html
1-255 一些通用端口 (众所周知的程序占用)
256 --1023 系统端口
1024 -- 65535 自用端口 >10000
可靠性 : 数据在传输中,无失序 无差错 无丢失 无重复
2. 服务器接受到请求进行确认,返回确认报文
3. 客户端收到服务器回复最终确认连接
2. 被动方回复报文,表示已经接收到请求,准备断开
3. 被动方再次发送报文,表示准备处理就绪,可以断开
4. 主动发发送确认报文,断开连接
e.g. 聊天信息 文件的上传下载, 邮件处理
网页获取
不保证传输的可靠性
没有连接和断开的过程
数据的首发比较自由
面向连接可靠的传输 tcp的传输 流式套接字
面向无连接不可靠的传输 udp的传输 数据报套接字
TCP的服务端
sock_type = SOCK_STREAM,
proto = 0)
功能 : 创建套接字
参数 : sock_family 地址族类型 AF_INET ipv4网络通信
sock_type 套接字类型 SOCK_STREAM 流式
SOCK_DGRAM 数据报
proto 通常为0 选定子协议类型
返回值 : 返回套接字对象
功能 : 绑定地址
参数 : addr ---》 元组 (ip,port) (‘0.0.0.0‘,1234)
功能: 将套接字设置为监听套接字,创建监听队列
参数: 监听队列大小
功能 : 阻塞等待处理客户端连接
返回值 : connfd 新的套接字,用于和客户端通信
addr 连接的客户端的地址 (ip,port)
* 阻塞函数 : 当程序运行到阻塞函数位置,如果某种条件没有达成则暂停程序运行,知道条件达成结束阻塞
功能 : 接受消息
参数 : 一次接受消息的大小 字节
返回值 : 返回接受到的内容
功能 : 发送消息
参数 : 要发送的内容 (bytes格式)
返回值 : 返回实际发送的字节数
2. 发起连接
功能 : 向服务端发起连接
参数 : 服务端地址 元组
4. 关闭套接字