建立UDP连接的示例:
# server端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1', 10010)) while True: conn, addr = sk.recvfrom(1024) print(conn.decode()) msg = input('>>>: ') sk.sendto(msg.encode(),addr) if msg == 'q': break sk.close()
# client 端 import socket sk = socket.socket() sk.connect(('127.0.0.1', 10010)) while True: msg = sk.recv(1024) print(msg.decode()) msg1 = input('>>>>: ') sk.send(msg1.encode())
socketserver示例:
# server端 import socketserver class Myserver(socketserver.BaseRequestHandler): def handle(self): conn = self.request while True: msg = input('>>>.') conn.send(msg.encode()) msg = conn.recv(1024) print(msg.decode()) server = socketserver.ThreadingTCPServer(('127.0.0.1',10010),Myserver) server.serve_forever()
client端 import socket sk = socket.socket() sk.connect(('127.0.0.1', 10010)) while True: msg = sk.recv(1024) print(msg.decode()) msg1 = input('>>>>: ') sk.send(msg1.encode())
文件下载:(文件上传则相反)
# server端 import os import json import socket import struct file_path = r'E:\study\teacher\day22 视频以及笔记\02 深圳骑士计划脱产班3期 day22 面向对象之反射.mp4' file_size = os.path.getsize(file_path) # 获得文件大小 file_name = os.path.basename(file_path) # 获得文件名 file_info = {'file_size': file_size, 'file_name': file_name, 'operate': 'download'} json_file_info = json.dumps(file_info) # json字典,用于网络传输 len_json_file_info = len(json_file_info) # 求出json后字典bytes的长度 bytes_json_file_info = json_file_info.encode() # 将字典json后 在转换成bytes格式 sk = socket.socket() sk.bind(('127.0.0.1', 10010)) sk.listen() conn ,addr = sk.accept() conn.send(struct.pack('i', len_json_file_info)) # 发送struck后的len字典长度 conn.send(bytes_json_file_info) # 发送字典 while file_size > 0: with open(file_path, 'rb') as f: count = f.read(2048) # 每次读2048字节 conn.send(count) # 发送读取到的内容 file_size -= len(count) # 总大小,减去已发送的大小 conn.close() sk.close()
# client 端 import socket import struct import json sk = socket.socket() sk.connect(('127.0.0.1', 10010)) len_info = sk.recv(4) # 收到4个字节,内容为struct了字典长度 len_file_info = struct.unpack('i', len_info)[0] # 结struct包,拿元组第一个元素,就是字典的长度 file_info = sk.recv(len_file_info).decode() # 按照字典长度,接收相应的数据,并解码 info_dic = json.loads(file_info) # 字典去json化 with open(info_dic['file_name'], 'wb') as f1: while info_dic['file_size'] > 0: count = sk.recv(2048) f1.write(count) info_dic['file_size'] -= len(count) sk.close()