基于socket实现上传文件
基于socket实现文件上传
客户端代码:
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 这个是实现上传文件 首先让客户端传递给服务端文件的大小, 然后读取文件,之后发送给服务端 """ import os import socket obj = socket.socket() obj.connect(("127.0.0.1",111)) #阻塞 ret_bytes = obj.recv(1024) ret_str = str(ret_bytes,encoding="utf-8") print(ret_str) #发送当前文件大小 size = os.stat("f.png").st_size obj.sendall(bytes(str(size),encoding="utf-8")) #发送文件 with open("f.png","rb") as f: for line in f: obj.sendall(line) obj.close()
服务端
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 先接收客户端传递过来文件的大小 之后开始读取文件,并且做一个判断,如果大小读取完毕之后关闭 """ import socket sk = socket.socket() sk.bind(("127.0.0.1",111)) sk.listen() #连接客户端信息 while True: conn,adress = sk.accept()#开始阻塞 conn.sendall(bytes("welcome entry FTP",encoding="utf-8")) #先接收文件大小,然后开始接收客户端信息 file_size = str(conn.recv(1024),encoding="utf-8") print(file_size) totle_size = int(file_size) #传递过来开始大小为0 has_recv = 0 #以二进制方式接收,因为sendall发送的是二进制文件 f = open("new.png","wb") #接收文件内容,直到获取完毕 while True: if totle_size == has_recv: break data = conn.recv(1024) f.write(data) has_recv = len(data) f.close()