socket网络编程实现远程备份

这是一个Python实现的远程备份系统,包括客户端和服务器两部分。客户端通过Socket连接服务器,发送备份文件的元信息和文件内容,可以选择是否进行压缩。服务器接收请求,读取文件信息并接收文件,保存到指定目录。该系统采用Tkinter库构建GUI界面,提供友好的用户交互体验。
摘要由CSDN通过智能技术生成
#!/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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值