TCP传输大文件
服务端
import socket import os import json import struct server = socket.socket() server.bind((\'127.0.0.1\',8080)) server.listen(5) while True: conn,addr = server.accept() while True: try: header_len = conn.recv(4) # 解析字典报头 header_len = struct.unpack(\'i\',header_len)[0] # 再接收字典数据 header_dic = conn.recv(header_len) real_dic = json.loads(header_dic.decode(\'utf-8\')) # 获取数据长度 total_size = real_dic.get(\'file_size\') # 循环接收并写入文件 recv_size = 0 with open(real_dic.get(\'file_name\'),\'wb\') as f: while recv_size < total_size: data = conn.recv(1024) f.write(data) recv_size += len(data) print(\'上传成功\') except ConnectionResetError as e: print(e) break conn.close()
客户端
import socket import json import os import struct client = socket.socket() client.connect((\'127.0.0.1\',8080)) while True: # 获取电影列表 循环展示 MOVIE_DIR = r\'D:\python脱产10期视频\day25\视频\' movie_list = os.listdir(MOVIE_DIR) # print(movie_list) for i,movie in enumerate(movie_list,1): print(i,movie) # 用户选择 choice = input(\'please choice movie to upload>>>:\') # 判断是否是数字 if choice.isdigit(): # 将字符串数字转为int choice = int(choice) - 1 # 判断用户选择在不在列表范围内 if choice in range(0,len(movie_list)): # 获取到用户想上传的文件路径 path = movie_list[choice] # 拼接文件的绝对路径 file_path = os.path.join(MOVIE_DIR,path) # 获取文件大小 file_size = os.path.getsize(file_path) # 定义一个字典 res_d = { \'file_name\':\'性感荷官在线发牌.mp4\', \'file_size\':file_size, \'msg\':\'注意身体,多喝营养快线\' } # 序列化字典 json_d = json.dumps(res_d) json_bytes = json_d.encode(\'utf-8\') # 1.先制作字典格式的报头 header = struct.pack(\'i\',len(json_bytes)) # 2.发送字典的报头 client.send(header) # 3.再发字典 client.send(json_bytes) # 4.再发文件数据(打开文件循环发送) with open(file_path,\'rb\') as f: for line in f: client.send(line) else: print(\'not in range\') else: print(\'must be a number\')
UDP模拟QQ
服务端
import socket server = socket.socket(type=socket.SOCK_DGRAM) server.bind((\'127.0.0.1\',8080)) while True: data, addr = server.recvfrom(1024) print(data.decode(\'utf-8\')) msg = input(\'>>>:\') server.sendto(msg.encode(\'utf-8\'),addr)
客户端
import socket client = socket.socket(type=socket.SOCK_DGRAM) server_address = (\'127.0.0.1\',8080) while True: msg = input(\'>>>:\') msg = \'来自客户端1的消息:%s\'%msg client.sendto(msg.encode(\'utf-8\'),server_address) data, server_addr = client.recvfrom(1024) print(data.decode(\'utf-8\'))