ePyqt 界面化聊天工具模块 和pygame类似
Python 网络编程
网络地址协议 internet protocal 简称IP
国际化标准组织 ISO 定义了网络数据传输模型OSI/RM参考模型
客户端
享受服务的一端,对应软件中的客户端
服务端
提供服务的一端 保证24小时提供服务于
客户端和服务端的架构模型 区分硬件模式和软件模式
私有地址
A类地址 10.0.0.0-10.255.255.255
B类地址 172.16.0.0-172.31.255.255
C类地址 192.168.0.0-192.168.255.255
本机地址 用于当前主机进行网络回路测试 127.0.0.1 localhost(本地主机)
在 C盘 \Windows\system32\drivers\etc\hosts 里面有网络地址本机映射
DNS服务器:域名解析服务器
将域名转换成对应的IP地址
http://www.baidu.com-> 220,128.0.120
Port 端口
在Unix上的查询端口
ps -ef|grep 5040
在Windows上查询端口
netstat -ano |findstr 5040
查询所有端口|查询某个字符串
nslookup www.baidu.com
域名解析协议
netstat -ano
查询所有端口
1024 以下的端口 系统在用
8000 以下的端口 应用程序在用
开发软件 定义的端口 8000+
计算机端口范围 0~65535之间
端口根据使用场景分为 公用端口,动态端口,保留端口
公用端口 0~1023
动态端口 1024~65535
保留端口 一般是Unix系统中超级用户进程分配保留端口号
21 |
FTP文件传输端口 |
22 |
ssh服务端口 |
23 |
telnet服务端口 |
25 |
smtp邮件服务端口 |
80 |
http超文本传输协议端口 |
110 |
Pop3 邮局协议端口 |
115 |
Sftp安全文件传输协议端口 |
443 |
https 安全超文本传输协议端口 |
协议 (protocal)
多方协议商定的 约定 规则 规范
为了多台计算机之间能友好的完成不同软件的数据的通信,
目前最主流的数据传输协议是欧洲计算机制造协会联盟也称国际化组织ISO
指定的OSI/RM七层网络传输模型
应用层 提供应用程序之间的通信
表示层 梳理数据格式、数据加密
会话层 建立,维护,管理会话
传输层 建立主机端到端的连接
网络层 寻址和路由选择
数据链路层 提供介质访问,链路管理等
物理层 比特流二进制数据传输
如何打开 虚拟终端协议(telnet)
打开控制面板 选择程序和功能 在左上角有一个 启用或关闭windows功能点击进入
选择telnet .. 选中后点击确定即可
在命令行中Telnet www.***.com 进行连接
Python网络编程
传统网络编程
非阻塞异步网络编程
Socket (较偏底层 以后很少用)
通过socket套接字 对象的连接完成多种协议的网络程序服务端、客户端的开发和数据通信
Socket 是一种计算机网络数据结构 中文译名:套接字
面向文件的套接字: 通过文件进行数据交互
Unix系统中出现 ->地址家族[Address Family:]
面向网络的套接字: 通过网络进行数据交互
为了区分不同平台不同体型的套接字 定义了地址家族的概念 Adress Family 简称AF
UNIX中 AF_UNIX 或者AF_LOCAL
AF_INET AF_INET6 支持因特网协议寻址IPV4 IPV6
Python中的套接字
为了明确表示网络中一台数据交互的主机 ,需要通过ip地址寻址确定主机位置 通过port端口号确定主机交互接口
在网络套接字交互过程中出现两个模型
面向连接的套接字模型(长连接)
Tcp端对端传输协议
Socket.socket.SOCK_STREAM
面向无连接的套接字模型(短连接)
UDP广播协议
只负责发送不保证数据的完整性和实效性
数据传输完成立刻断开连接
Socket.socket.SOCK_DGRAM
套接字常用操作
Tcp 传输控制协议
是一种面向连接的,可靠的,基于字节流的传输层通信协议
三次握手建立连接
发送寻址请求码Seq =100 ack=101 确认远程端服务器是否存在
发送确认请求码Seq =101 ack=300 确认是否可以连接
发送连接请求码Seq = 300 ack =80 确认连接
四次挥手断开连接
发送数据验证请求码 通知准备断开
发送一个传输结束标记 确认数据序号完整性
发送一个确认结束标记 断开连接准备,回收数据
发送连接断开标记 确认断开
会被利用实施DDOS拒绝服务攻击
创建tcp服务端模块
引入模块 :引入套接字模块 import socket
Host 主机
Port 端口
Address 地址 为一个元组 (host, port)
Buffer = 1024 缓冲区
地址家族 连接类型 默认协议
# socket.socket(socket_family, socket_tpye, protocal=0)
创建一个tcp服务端套接字对象
Tcp_server = socket.socket(socket.AF_INET, socket.socket.SOCK_STREAM)
Socket.af_inet 面向网络的套接字模型对象 AF_INET ipv4 寻址协议 AF_INET ipv6寻址协议
TCP:Socket.socket.sock_stream 面向连接的套接字socket.SOCK_STREAM
UDP:Socket.socket.SOCK_DGRAM(datagram(数据报) 面向无连接的套接字(短连接)
Tcp_socket.bind((主机名, 端口))绑定主机
Tcp_socket.listen()开始监听 指定的端口是否有数据接入
While True:
# 接入客户端
Server_socket, addr = tcp_server.accept()
Server_socket.send()/recv() 和客户端发收消息
并将收发的消息转码成 相同的格式如:
*.encode(“utf-8”) 发送消息转码成utf-8
*.decode(“utf-8”) 接受消息解码成utf-8
关闭套接字,释放资源
Server_socket.close()
程序结束,关闭服务端
Tcp_server.close()
什么是网络
什么是ip有什么特点 有什么类型
什么是端口, 有什么特点 有什么类型
3w1h: what where why how
什么是协议
OSI/RM
常见网络传输协议
网络 IP 端口 协议
1. TCP服务端编程/客户端编程 熟练
2. TCP协议的处理方式[传输控制协议,特点,特性,使用场景]
3. 网络、IP,端口、协议、OSI/RM模型,总结梳理文档
4. 扩展:使用Tkinter、PyQT,实现界面话的对讲机程序
Tkinter:python GUI编程模块;tk interface(tk接口)
windows:安装官方标准Python程序,内置了tkinter
安装miniconda程序,需要再次安装tkinter
PyQT:python GUI编程模块,强大!