本文共 2452 字,大约阅读时间需要 8 分钟。
直接上代码,代码中有一些注释
# 1.首先定义usage函数# 2.利用getopt模块获取命令行参数# 3.区分客户端和服务端# 4.编写客户端和服务器函数# 5.编写文件上传函数、文件下载函数import sysimport socketimport getoptimport timeupfile=""def main(): global upfile # 定义你要上传文件的名字 help=False listen=False target="" port=0 #2.利用getopt模块获取命令行参数 opts,args=getopt.getopt(sys.argv[1:],"t:p:u:hl") for o,a in opts: if o=="-t": target=a elif o=="-p": port=int(a) elif o=="-u": upfile=a elif o=="-h": help=True elif o=="-l": listen=True else: assert False,"Unhadled Option" # 如果输入的参数不对,则退出程序 if help: usage() # 如果有-h参数则打印帮助信息 # 3.区分客户端和服务器 if not listen: # 如果没有监听 状态则表示是一个客户端 client_handle(target,port) else: # 否则则是一个服务端 server_handle(port)# 4.编写客户端函数和服务端函数# 编写client_handle()def client_handle(target,port): client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立socket套接字 client.connect((target,port)) client.send(upfile.encode('utf-8')) time.sleep(1) # 这里暂停一秒的意思是为了不让文件名和文件的内容接受混乱 upload_file(client) client.close()# 编写server_handledef server_handle(port): server =socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind(('0.0.0.0',port)) server.listen(10) #监听的个数 print("[*] Listening on 0.0.0.0:%d" % port) while True: client_socket,addr=server.accept() download_file(client_socket)# 5.编写文件上传函数、文件下载函数# 定义upload_filedef upload_file(client): f=open(upfile,'rb') data =f.read() f.close() client.send(data)# 定义download_filedef download_file(client_socket): filename=client_socket.recv(1024) filename=filename.decode() print("[*]Receive the filename: %s" % filename) file_buffer="".encode('utf-8') while True: data=client_socket.recv(1024) if not data: break else: file_buffer+=data f=open(filename,'wb') f.write(file_buffer) f.close()# 1.首先定义usage函数def usage(): print("@author:BigStrong") print("-------------------") print("help info: python3 file_upload.py -h") print("client :python3 upload.py -t [target] -p [port] -u [uploadfile]") print("server: python filename.py -lp [port] ") sys.exit()if __name__=="__main__": main()
为了演示我开启了一台Ubuntu虚拟机作为服务端,windows10作为客户端
查看帮助信息: python3 file_upload.py -h
服务端: python3 file_upload.py -lp [监听端口]
客户端: python3 upload -u test.txt -t [服务端ip] 文件传输成功 注意: 如果传输失败的话,尝试换一个端口尝试一下转载地址:http://guhzi.baihongyu.com/