python之路——31
复习
1.网络编程
1.公网ip 局域网ip
2.端口号——需要进行网络通信时,为了在计算机上找到唯一的程序
3.TCP协议 UDP协议
TCP可靠的,面向连接的,耗时长的
三次握手:
四次挥手
UDP不可靠的,无连接的,效率高的
4.arp协议:通过ip找mac
5.ip协议属于网络OSI七层协议中的那一层: 网络层
6.tcp协议udp属于传输层
7.arp协议属于数据链路层
学习内容
1.udp协议实现
1.不需要监听也不需要建立连接
2.启动服务之后只能被动的等待客户端消息
3.客户端发送消息的同时还会自带地址信息
4.消息回复时,需要发送消息,填写地址
2.黏包现象
1.UDP不会黏包,但是会丢包
2.TCP会黏包,但是不会丢包
3.TCP的黏包现象是因为协议内部的优化
代码区
1.话痨
# 话痨 server ''' import socket #TCP 协议 sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() while 1: conn, addr = sk.accept() while 1: msg = conn.recv(1024).decode('utf-8') print(msg) if msg == 'bye': conn.send(bytes('bye'.encode('utf-8'))) break info = input('>>> ') conn.send(bytes(info.encode('utf-8'))) conn.close() sk.close() ''' # 话痨client1 ''' import socket sk = socket.socket() sk.connect(('127.0.0.1',8080)) while 1: msg = input('>>> ') sk.send(bytes(msg.encode('utf-8'))) ret = sk.recv(1024).decode('utf-8') print(ret) if ret == 'bye': sk.send(bytes('bye'.encode('utf-8'))) break sk.close() ''' # 话痨client2 ''' import socket sk = socket.socket() sk.connect(('127.0.0.1',8080)) while 1: msg = input('>>> ') sk.send(bytes(msg.encode('utf-8'))) ret = sk.recv(1024).decode('utf-8') print(ret) if ret == 'bye': sk.send(bytes('bye'.encode('utf-8'))) break sk.close() '''
2.简易版qq
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。# 简易版qq server ''' import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1', 8080)) while 1: msg, addr = sk.recvfrom(1024) print(msg.decode('utf-8')) info = input('>>> ').encode('utf-8') sk.sendto(info,addr) sk.close() ''' # 简易版qq client1 ''' import socket sk = socket.socket(type=socket.SOCK_DGRAM) ip_port = ('127.0.0.1', 8080) while 1: info = input('ALEX:') info = ('\033[34m alex:%s\033[0m'%info).encode('utf-8') sk.sendto(info, ip_port) ret,addr = sk.recvfrom(1024) print(ret.decode('utf-8')) sk.close() ''' # 简易版qq client2 ''' import socket sk = socket.socket(type=socket.SOCK_DGRAM) ip_port = ('127.0.0.1', 8080) while 1: info = input('TOM:') info = ('\033[32m tom:%s\033[0m'%info).encode('utf-8') sk.sendto(info, ip_port) ret,addr = sk.recvfrom(1024) print(ret.decode('utf-8')) sk.close() '''
3. 黏包现象
# 黏包现象 server ''' import socket sk = socket.socket() sk.bind(('127.0.0.1',8090)) sk.listen() conn, addr = sk.accept() while True: cmd = input('>>> ') if cmd == 'q': break conn.send(cmd.encode('gbk')) ret1 = conn.recv(1024).decode('utf-8') # ret2 = conn.recv(1024).decode('utf-8') print(ret1) # print(ret2) conn.close() sk.close() ''' # 黏包现象 client ''' import socket import subprocess sk = socket.socket() sk.connect(('127.0.0.1',8090)) while True: cmd = sk.recv(1024).decode('gbk') ret = subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) std_out = 'stdout : ' + (ret.stdout.read()).decode('gbk') std_err = 'stderr : ' + (ret.stderr.read()).decode('gbk') print(std_out) print(std_err) sk.send(std_out.encode('utf-8')) sk.send(std_err.encode('utf-8')) sk.close() '''

更多精彩