=========day06.网络开发和通信=========
1.回顾数据库。
2.OSI(Open System Interconnect 网络互联模型):
七层(五层)模型:
应用层=====为应用程序提供服务
表示层=====数据格式化,数据加密: 文字,图像,声音等不同表现形式的信息
会话层=====建立,管理和维护会话
(应用层)================HTTP Telnet FTP TFTP DNS SMTP
传输层=====建立,管理和维护端到端的连接,负责可靠传输==========TCP UDP
网络层=====IP选址及路由选择(路由器)===========IP ICMP RIP IGMP
数据链路层===提供介质访问和链路管理(交换机)===ARP RARP IEEE802.3 PPP CSMA/CD
物理层=====比特流和电子信号之间的切换===========FE自协商 Manchester MLT-3 4A PAM5
3.UDP通信:
通信过程:类似于发短息,不需要先建立连接
4.TCP通信:(三次握手,四次挥手)
通信过程:类似于打电话,需要先建立连接
三次握手:
1.首先Client端发送连接请求报文,
2.Server段接受连接后回复ACK报文,并为这次连接分配资源。
3.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,
这样TCP连接就建立了.
四次挥手:(全双工:发送信息的同时,也能收信息)
1.客户端说,我要断开了;
2.服务器回复,断开吧;
3.服务器说,我也要断开了;
4.客户端回复,断开吧。
5.TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);
UDP是无连接的,即发送信息之前不需要建立连接。
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;
UDP尽最大努力交付,即不保证可靠交付。
Tcp 通过校验和重传控制,序号标识,滑动窗口、确认应答实现可靠传输。
如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
3、UDP具有较好的实时性,工作效率比TCP高,
适用于对高速传输和实时性有较高的通信或广播通信。
4、每一条TCP连接只能是一对一的;
UDP支持一对一,一对多,多对一和多对多的交互通信。
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
6.python内置socket模块:
服务器===server
客户端===client
7.tcp服务器:
from socket import socket
# 1.创建socket, 参数不填默认ipv4,tcp传输
server_sk = socket()
# 2.绑定,服务器ip和端口
server_sk.bind(('0.0.0.0', 9898))
-- 说明:'0.0.0.0'表示本机所有ipv4地址
# 3.变为监听套接字
# 使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
# 监听,最多允许128个接入
server_sk.listen(128)
print('服务器在等待,客户端的到来 .... ')
while True:
# 如果有客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
# client_sk用来为这个客户端服务
# server_sk就可以省下来专门等待其他新客户端的链接
# 4.阻塞直到接收到客户端连接
client_sk,addr = server_sk.accept()
# 5.接受客户端信息
data = client_sk.recv(1024)
print('接收到的数据为:', data.decode('utf-8'))
# 6.向客户端发送 'OK'
client_sk.send('OK'.encode('utf-8'))
client_sk.close # 关闭为这个客户端服务的套接字
8.tcp客户端构建流程:
from socket import socket
# 1.创建socket, 参数不填默认ipv4,tcp传输
client_sk = socket()
# 2.链接服务器,(server_ip, server_port)
client_sk.connect(('127.0.0.1', 9898))
# 3.向服务器发送消息'你好'
client_sk.send('你好'.encode("utf-8"))
# 4.接收对方发送过来的数据,最大接收1024个字节
recvData = client_sk.recv(1024)
print('服务器发来的数据为:', recvData.decode('utf-8'))
# 关闭客户端套接字
client_sk.close()
9.客户端例2:
import socket
# 创建一个socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
s.connect(('172.16.10.119', 80))
# 发送数据:
s.send(b'GET / HTTP/1.1\r\n172.16.10.119:8080/bwie/mhIndex.do\r\nConnection: close\r\n\r\n')
# 接收数据:
buffer = []
while True:
# 每次最多接收1k字节:
d = s.recv(1024)
if d:
buffer.append(d)
else:
break
data = b''.join(buffer)
# 关闭连接:
s.close()
header, html = data.split(b'\r\n\r\n', 1)
print(header.decode('utf-8'))
# 把接收的数据写入文件:
with open('sina.html', 'wb') as f:
f.write(html)
10.服务器例2:
import socket
# 创建一个socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 监听端口:
s.bind(('127.0.0.1', 9999))
s.listen(5)
print('Waiting for connection...')
def tcplink(sock, addr):
print('Accept new connection from %s:%s...' % addr)
sock.send(b'Welcome!')
while True:
data = sock.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8') == 'exit':
break
sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
sock.close()
print('Connection from %s:%s closed.' % addr)
while True:
# 接受一个新连接:
sock, addr = s.accept()
# 创建新线程来处理TCP连接:
t = threading.Thread(target=tcplink, args=(sock, addr))
t.start()
python 网络开发和通信
猜你喜欢
转载自blog.csdn.net/lq_hello/article/details/106096650
今日推荐
周排行