#!/usr/bin/env python
#-*-coding:utf-8-*-
#GUI设计与构建 客户端建立
from tkinter import *
from tkinter.ttk import *
import socket
import struct
#启动服务
def start(host,port):
pass
#我的控件
class MyFrame(Frame):
def __init__(self,root):
super().__init__(root)
self.root=root
self.grid()
#网格化布局
self.remote_ip='127.0.0.1'
self.remote_ports=10888
self.remote_ip_var=StringVar()
self.remote_ports_var=IntVar()
self.bak_src_var=StringVar
#图形化界面
self.init_components()
def init_components(self):
proj_name=Label(self,text="远程备份客户机")
#位置
proj_name.grid(columnspan=2)
serv_ip_label=Label(self,text="服务地址: ")
#第一行第一列
serv_ip_label.grid(row=1)
self.serv_ip=Entry(self,textvariable=self.remote_ip_var)
#默认ip地址
self.remote_ports_var.set(self.remote_ip)
self.serv_ip.grid(row=1,column=1)
#端口号框
serv_port_label=Label(self,text="服务端口: ")
serv_port_label.grid(row=2)
self.serv_port=Entry(self,textvariable=self.remote_ports_var)
#默认的ports窗口
self.remote_ports_var.set(self.remote_ports)
self.serv_port.grid(row=2,column=1)
src_label=Label(self,text="备份的目标:")
src_label.grid(row=3)
self.bak_src=Entry(self,textvariable=self.bak_src_var)
self.bak_src.grid(row=3,column=1)
#定以端口号
self.start_serv_btn=Button(self,text="开始备份",command=self.start_send)
self.start_serv_btn.grid(row=4)
self.start_serv_btn=Button(self,text="退出程序",command=self.root.destroy)
self.start_serv_btn.grid(row=4,column=1)
#开始发送的方法
def start_send(self):
print(self.remote_ip_var.get(),self.remote_ports_var.get())
print('start---')
if __name__=='__main__':
root=Tk()
root.title('远程备份客户机')
root.resizable(False,False)
app=MyFrame(root)
#启动程序
app.mainloop()
#!/usr/bin/env python
#-*-coding:utf-8-*-
#GUI设计与构建
from tkinter import *
from tkinter.ttk import *
import socket
import struct
#启动服务
def start(host,port):
pass
#我的控件
class MyFrame(Frame):
def __init__(self,root):
super().__init__(root)
self.root=root
self.grid()
self.local_ip='127.0.0.1'
self.serv_ports=[10888,20888,30888]
#图形化界面
self.init_components()
def init_components(self):
proj_name=Label(self,text="远程备份服务器")
#位置
proj_name.grid(columnspan=2)
serv_ip_label=Label(self,text="服务地址")
#第一行第一列
serv_ip_label.grid(row=1)
#下拉地址框
self.serv_ip=Combobox(self,values=self.get_ipaddr())
#默认ip地址
self.serv_ip.set(self.local_ip)
self.serv_ip.grid(row=1,column=1)
#端口号框
serv_port_label=Label(self,text="服务端口")
serv_port_label.grid(row=2)
self.serv_port=Combobox(self,values=self.serv_ports)
#默认的ports窗口
self.serv_port.set(self.serv_ports[0])
self.serv_port.grid(row=2,column=1)
#定以端口号
self.start_serv_btn=Button(self,text="启动服务",command=self.start_serv)
self.start_serv_btn.grid(row=3)
self.start_serv_btn=Button(self,text="退出服务",command=self.root.destroy)
self.start_serv_btn.grid(row=3,column=1)
#获取本地ip地址
def get_ipaddr(self):
host_name=socket.gethostname()
info=socket.gethostbyname_ex(host_name)
info=info[2]
#企业IP地址
info.append(self.local_ip)
return info
#启动服务器的方法
def start_serv(self):
print(self.serv_ip.get(),self.serv_port.get())
start(self.serv_ip.get(),self.serv_port.get())
if __name__=='__main__':
root=Tk()
root.title('备份服务器')
root.resizable(False,False)
app=MyFrame(root)
#启动程序
app.mainloop()
#!/usr/bin/env python
#-*-coding:utf-8-*-
#GUI设计与构建 客户端具体建立
from tkinter import *
from tkinter.ttk import *
import socket
import struct
import os
import pickle
#获取文件信息
def get_files_info(path):
if not path or not os.path.exists(path):
return None
files=os.walk(path)
infos=[]
file_paths=[]
for p,ds,fs in files:
for f in fs:
file_name=os.path.join(p,f)
file_size=os.stat(file_name).st_size
file_paths.append(file_name)
file_name=file_name[len(path)+1:]
infos.append((file_size,file_name))
return infos,file_paths
#向服务器发送信息
def send_files_infos(my_sock,infos):
fmt_str='Q'
#二进制编码
infos_bytes=pickle.dumps(infos)
infos_bytes_len=len(infos_bytes)
infos_len_pack=struct.pack(fmt_str,infos_bytes_len)
#二进制编码
#发送长度
my_sock.sendall(infos_len_pack)
#发送信息
my_sock.sendall(infos_bytes)
#发送文件
def send_files(my_sock,file_path):
f=open(file_path,'rb')
try:
while True:
data=f.read(1024)
if data:
my_sock.sendall(data)
else:
break
finally:
f.close()
#接收从服务器发来的信息
def get_bak_info(my_sock,size=7):
info=my_sock.recv(size)
print(info.decode('utf-8'))
#开始备份
def start(host,port,src):
if not os.path.exists(src
socket网络编程实现远程备份
最新推荐文章于 2023-04-26 20:28:18 发布
这是一个Python实现的远程备份系统,包括客户端和服务器两部分。客户端通过Socket连接服务器,发送备份文件的元信息和文件内容,可以选择是否进行压缩。服务器接收请求,读取文件信息并接收文件,保存到指定目录。该系统采用Tkinter库构建GUI界面,提供友好的用户交互体验。
摘要由CSDN通过智能技术生成