最近刚开始学习python网络编程,想借此整理回顾之前所学,嘻嘻
网络编程的三要素:
- ip地址:即主机地址,这是计算机的唯一标识,通过IP地址来找到指定的计算机
- 端口:用于表示进程的逻辑地址,通过端口来找到指定的进程
- 协议:定义通信规则,只有符合协议才可以通信
TCP/IP模型
参考上图,这里主要采用TCP/IP的4层模型,TCP/IP是 Internet 最基本的协议,共由传输层的TCP协议和网络层的IP协议组成。
通俗来说,TCP协议负责发现传输层的传输问题,一有问题就发出信号,并要求重新传输,直到所有数据安全正确传输到目的地。IP协议(位于网络层)负责传输层和网络接口层的数据包传递。
TCP协议的三次握手
举个栗子: ①飞行员:02 02 听到请回答?
②基地:01 01 收到收到 请说(此时二者同步在线)
③通信。(必须要连接)
TCP在通信需要2个角色:服务器端,客户端,两者可以互相传递数据
python模拟TCP通信–服务器端
服务器端的实现5个步骤及使用使用的方法:
① 使用socket类创建对象
②绑定地址 bind() (用来定义服务器端的地址)
③监听客户端 listen() (第一次握手)
④被动接收客户端连接 accept() (第二次握手)
⑤发送或接收数据 send(),recv()(第三次握手)
上代码!
需要注意的是
1. socket能实现不同主机之间的进程通信,网络上大多数服务都是基于socket来完成通信的,python中的 socket类用来处理用户的请求和相应。
gethostname()这个方法是用来获取本地ip地址,由于是在同一台电脑模拟的,所以服务器和客户端的ip地址是相同,只有端口号不同
# 1.请仔细再查看关于socket类的构造方法、常用函数,
# 同时再自行使用socket来模拟服务器和客户端进行模拟通信。(类似于课堂案例)
# 模拟服务器端
from socket import *
#1 创建对象
soc = socket() #无参数时默认SOCK_STREAM即 采用TCP协议
#2 绑定地址(服务器端的地址)
addr= (gethostname(),1001) #1001为端口号
soc.bind(addr)
# 3 #监听 等待连接
soc.listen(5)
# 4 等待客户端连接
#accept连接成功时返回一个socket对象 一定要用这个返回对象来进行接收数据操作
soc_obj=soc.accept()
# 5 发送数据
#发送数据或接收数据时 注意一定要是下标0 即socket对象来调用
#若未用这个下标0,那么客户端会收不到数据
# soc_obj[0].send(b"hello lala")
# soc_obj[0].close() #发送完数据后关闭服务器,只有在发送数据的时候才能用
# 或接收数据
data = soc_obj[0].recv(1024) #1024为接收的数据长度 自定义的 可更改
print(data)
python 模拟客户端
客户端模拟的3个步骤及方法:
①创建对象
②连接服务器端
③收发数据
#模拟客户端
from socket import *
#1 创建对象 TCP 流模式
soc= socket(AF_INET,SOCK_STREAM)
#2 连接服务器端
addr = (gethostname(),1001) #地址为服务器端的地址
soc.connect(addr)
#3 接收数据
# data = soc.recv(1024)
# print(data)
#发送数据
soc.send(b'66666666666') #b表示将后面的字符串转化 数据类型为byte类
最后结尾处,如果各位读者发现不足之处,还请不吝提出,哈哈,相互学习学习