标签:对比文件 one 中文字符 gif 功能实现 lap nis 存在 操作
我们要利用socket来实现下载一个文件,该如何操作呢?
服务端:
客户端:
服务端:
# -*- coding: UTF-8 -*- import os import socket # TCP/IP协议, tcp ,如果不填写就是默认这个 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((‘localhost‘, 9999)) server.listen() while True: # 可以接受多个客户端 conn, addr = server.accept() print(‘new conn‘, addr) while True: cmd_res = conn.recv(1024) if not cmd_res: # 防止当接受的客户端数据为空时,程序卡掉 print(‘client has lost...‘) break else: # 获取命令和文件名 cmd, filename = cmd_res.decode().split() print(cmd, filename) if os.path.isfile(filename): # 判断文件是否存在 # 文件大小 file_size = os.stat(filename).st_size # 发送文件大小 conn.send(str(file_size).encode(‘utf-8‘)) # 等待客户端确认 conn.recv(1024) # 打开文件 f = open(filename, ‘rb‘) for line in f: conn.send(line) f.close()
客户端:
# -*- coding: UTF-8 -*- import socket client = socket.socket() client.connect((‘localhost‘, 9999)) while True: cmd = input(‘>>:‘).strip() # 判断是否发送空数据,如果是就重新发送 if len(cmd) == 0: continue else: client.send(cmd.encode(‘utf-8‘)) # 获取服务端发送的文件大小 size = client.recv(1024) total_file_size = int(size.decode()) # 返回确认 client.send(b‘file size received‘) filename = cmd.split()[1] print(filename) received_size = 0 # 写入文件 f = open(filename + ‘.new‘, ‘w‘) while received_size < total_file_size: r_data = client.recv(1024) received_size += len(r_data) f.write(r_data.decode(‘gbk‘, ‘ignore‘) + ‘\n‘) else: print(‘file sizes‘, total_file_size, received_size) print(‘receive finished‘) f.close()
运行结果:
这个程序有缺陷,首先目前只能读取本文件夹下的文件,其次新生成的文件解码后还是有部分中文字符乱码,哎...
下周做了,,,
标签:对比文件 one 中文字符 gif 功能实现 lap nis 存在 操作
原文地址:http://www.cnblogs.com/bigberg/p/7750182.html