annn
vernuser 8 months ago
parent 216cbd4dd5
commit 533611cf14

@ -4,7 +4,7 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="b490c3d2-83ec-4ee0-b2e3-44d7951d4337" name="更改" comment="已成功实现在虚拟机和物理机之间运行" />
<list default="true" id="b490c3d2-83ec-4ee0-b2e3-44d7951d4337" name="更改" comment="加了ui" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@ -30,6 +30,7 @@
</map>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
<option name="WARN_ABOUT_CRLF" value="false" />
</component>
<component name="GitHubPullRequestSearchHistory">{
&quot;history&quot;: [
@ -68,11 +69,12 @@
&quot;Python.receiver.executor&quot;: &quot;Run&quot;,
&quot;Python.sender.executor&quot;: &quot;Run&quot;,
&quot;Python.server.executor&quot;: &quot;Run&quot;,
&quot;Python.ui.executor&quot;: &quot;Run&quot;,
&quot;Python.utils.executor&quot;: &quot;Run&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;annn&quot;,
&quot;last_opened_file_path&quot;: &quot;D:/college/大三/应用密码学课设&quot;,
&quot;last_opened_file_path&quot;: &quot;C:/Users/Asus/Desktop/烽台校园实习/交接资料/实验室仿真台攻击脚本/实验室仿真台攻击脚本/仿真台攻击脚本11.22&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
@ -81,8 +83,8 @@
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
}
}</component>
<component name="RunManager" selected="Python.sender">
<configuration name="encryption_utils" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<component name="RunManager" selected="Python.ui">
<configuration name="generate_key" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="应用密码学课设" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
@ -96,7 +98,7 @@
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/encryption_utils.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/generate_key.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
@ -105,7 +107,7 @@
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="receiver" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<configuration name="sender" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="应用密码学课设" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
@ -119,7 +121,7 @@
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/receiver.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/sender.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
@ -128,7 +130,7 @@
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="sender" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<configuration name="server" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="应用密码学课设" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
@ -142,7 +144,7 @@
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/sender.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/server.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
@ -151,7 +153,7 @@
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="server" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<configuration name="ui" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="应用密码学课设" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
@ -165,7 +167,7 @@
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/server.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ui.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
@ -199,11 +201,11 @@
</configuration>
<recent_temporary>
<list>
<item itemvalue="Python.ui" />
<item itemvalue="Python.generate_key" />
<item itemvalue="Python.sender" />
<item itemvalue="Python.server" />
<item itemvalue="Python.utils" />
<item itemvalue="Python.receiver" />
<item itemvalue="Python.encryption_utils" />
</list>
</recent_temporary>
</component>
@ -229,7 +231,10 @@
<workItem from="1734342680147" duration="380000" />
<workItem from="1734406816783" duration="1550000" />
<workItem from="1734436439919" duration="90000" />
<workItem from="1734488993135" duration="326000" />
<workItem from="1734488993135" duration="581000" />
<workItem from="1734607228597" duration="4000" />
<workItem from="1734770663055" duration="28000" />
<workItem from="1734779266249" duration="2556000" />
</task>
<task id="LOCAL-00001" summary="加了互传">
<option name="closed" value="true" />
@ -271,7 +276,23 @@
<option name="project" value="LOCAL" />
<updated>1734489312302</updated>
</task>
<option name="localTasksCounter" value="6" />
<task id="LOCAL-00006" summary="已成功实现在虚拟机和物理机之间运行">
<option name="closed" value="true" />
<created>1734489392435</created>
<option name="number" value="00006" />
<option name="presentableId" value="LOCAL-00006" />
<option name="project" value="LOCAL" />
<updated>1734489392435</updated>
</task>
<task id="LOCAL-00007" summary="加了ui">
<option name="closed" value="true" />
<created>1734782367798</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1734782367798</updated>
</task>
<option name="localTasksCounter" value="8" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@ -305,14 +326,16 @@
<MESSAGE value="加了中文" />
<MESSAGE value="签名错误?" />
<MESSAGE value="已成功实现在虚拟机和物理机之间运行" />
<option name="LAST_COMMIT_MESSAGE" value="已成功实现在虚拟机和物理机之间运行" />
<MESSAGE value="加了ui" />
<option name="LAST_COMMIT_MESSAGE" value="加了ui" />
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/$receiver.coverage" NAME="receiver 覆盖结果" MODIFIED="1734342809902" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/$file_transfer.coverage" NAME="file_transfer 覆盖结果" MODIFIED="1733810226775" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/$server.coverage" NAME="server 覆盖结果" MODIFIED="1734342831970" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/$utils.coverage" NAME="utils 覆盖结果" MODIFIED="1734342818616" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/$generate_key.coverage" NAME="generate_key 覆盖结果" MODIFIED="1733815607563" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/$ui.coverage" NAME="ui 覆盖结果" MODIFIED="1734782287253" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/$generate_key.coverage" NAME="generate_key 覆盖结果" MODIFIED="1734781683799" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/$generate_keys.coverage" NAME="generate_keys 覆盖结果" MODIFIED="1733809016631" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/$encryption_utils.coverage" NAME="encryption_utils 覆盖结果" MODIFIED="1734342806348" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/$sender.coverage" NAME="sender 覆盖结果" MODIFIED="1734489006420" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />

@ -1,9 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIBPQIBAAJBAKJRCS1LQm9GAgZejtry1W0wMANwQQau01PeezV6DY7TOG+G08cv
boN4UaS5comyK7QKIr6WVi/4o+Pm5UcZsQ0CAwEAAQJAY0EgVnUd48Mwe8qYmmRB
hCoiQggDi12eVjvGpbXDPWF3yHX+mVbqrJY3oi9Ub9iJW8Lqw97DcBp/74fvvxd/
9QIjAPQTvQk8a7yTItR/Tyl/UStL0e+3KY6wuhWeEzACMV7JFcMCHwCqPtsRTG8e
ZBgat2p3ih2tkkO/XNshxOLibUZiIO8CIwCpH2A2HSK96OoSeiB9LZYtvPy78Jug
Hr7iKcU719kjx4wHAh8AqULQ/wPlPmv54yYUfkEdfKJ9JNcnLw3XHZPTdGCVAiJa
N3aZQDyYTX+/8V0E7vxaUlYJMgwXtXs+94qi25rsIWQr
-----END RSA PRIVATE KEY-----

@ -1,4 +0,0 @@
-----BEGIN RSA PUBLIC KEY-----
MEgCQQCiUQktS0JvRgIGXo7a8tVtMDADcEEGrtNT3ns1eg2O0zhvhtPHL26DeFGk
uXKJsiu0CiK+llYv+KPj5uVHGbENAgMBAAE=
-----END RSA PUBLIC KEY-----

@ -1,27 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcmg7dhBByM+WbVKZ+5w
fEO2eCRD0OhyjGZaVMEkfkv9jWonH8nY9HT8lziJByNbs6ZbZnFkPoUxBi52938B
q2pTAJ3Z5l06qLfd6ryVdAO0IxZG3+RZ2mfL4Jwg7jTrJ5ygRaiV/K8FjSzAkrEY
HGwKc7mfxkyqmWbdq4f4ETBsiZ6dSCoMqtDiSmeZ6/zjryAOGhqHDX/Zh3BqqOca
pT1jm6Kf4Pc/BcpsHYQzblve3FrjDWnQCzHGBN4AfQ8qmrQAXCaFa8xzAnzgvznV
k411Bu2Rmsp1EWrBC5uY8x0IYF7bMDi2/Bl5XAbPU32fCo141v2r/NeSV20p2k7D
xwIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl4H8ztB6F4Smewf7OUpg
QCm2iJST9+X+odvFV9lkA0cU3HLbPV7O/dAC0jjVFOM1fNcklHxkJppH7kjJ31/X
hfPvZpaShja6PZS2ffCPbQRBAcjhPs0gwzZMKe3qwUBZCAducFtgi7BXvNhRNfOM
ufPnuzHx//XJReQzJ6Z747jticAT7nLIF2EM+vl24jsM1Gnm1LyMPV3gyxUamfqy
LxyHr2WnqRNZs89CK4TnzrU9Jdw2Y5BzED9J7mDqOIOyDnzJ+9q/EN/ciOpnS04Y
kZH26nuVN90RHnp37MY9z7p3o8j8KRXir524o+UhBVgVkCS7zTmVorZsql7I2cx9
GQIDAQAB
-----END PUBLIC KEY-----

@ -1,27 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtSEr81A8CZPXnscsBgOk
bQcrn3/JELmndlf2Ysez8sKCgz04pB4XII0o7f2FZkDNLOu5fqs5OmSQd1IZRekn
Gudcw5QJTUEvTKLzbkJNSJzhf0+kH5yv9M3nS9DB6+VftjP0Hl84148UqpMUq71B
ygfwCFiUwgvUBbCfpO+gqth+oa38wmcHQUeHYFhsJRGn2wI3URNuZIcJjOax2SCV
AqRM/vyAS0Q7MSiGNV0BkVudhWkG0/uaIvCRxO/F3TB9F4x5mHgCt1/cnHeQ4H8a
7EsEmypSQ2oGB+oRt4GsvfFHwZGz8uOUxQkGGCqNt1cLcHoOHuFJBHCSWwN/kF1f
eQIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvLvy6YiIfvCz+aF9gEkf
HREjPPSPG6jI/hhSTiGG9i71rnCCrHFB3Nk0A1i/tv3rVn70O9W+jKroUNDNQaAo
I3ytv0r+3iw/qS8S53ErGEV5Ms7YMmgAkFTmQArWx9muD9JvLo1XFXvQFSIgtthd
yqXC+SKnWsK9b/gXN7qVv/r5sR5AMn067QZhVEc4cNfF0UEBS2+8UgxhH3PqbZzf
V+cBfKBQ8JNWVgDmRSvKowQOQE87tMwTgsQKONuYFHtnzQ1Lo8gyF0f8PVRfln+h
oj9WjvvCg0C9wBbfIuAxCgkqKEbb48KgUiNmT1YFJ3PaPAYjjchqQeFCT5CPqdC6
jQIDAQAB
-----END PUBLIC KEY-----

158
ui.py

@ -0,0 +1,158 @@
import tkinter as tk
from tkinter import filedialog, messagebox
import os
import subprocess
from sender import send_file
from receiver import receive_file
from utils import load_key
class FileTransferApp:
def __init__(self, root):
self.root = root
self.root.title("文件传输系统")
self.root.geometry("800x900") # 增大窗口尺寸
self.root.resizable(False, False) # 禁止调整窗口大小
# 设置窗口背景色
self.root.configure(bg="#f5f5f5")
# 加载密钥
self.sender_private_key = load_key('sender_private.pem')
self.receiver_public_key = load_key('receiver_public.pem')
self.receiver_private_key = load_key('receiver_private.pem')
self.sender_public_key = load_key('sender_public.pem')
# 创建UI
self.create_main_frame()
def create_main_frame(self):
# 主界面,选择发送方或接收方
self.main_frame = tk.Frame(self.root, bg="#f5f5f5")
self.main_frame.pack(fill="both", expand=True)
self.selection_var = tk.StringVar(value="sender") # 默认选择发送方
# 选择发送方或接收方
tk.Radiobutton(self.main_frame, text="我是发送方", variable=self.selection_var, value="sender", font=("Arial", 16),
bg="#f5f5f5", command=self.switch_mode).pack(pady=20)
tk.Radiobutton(self.main_frame, text="我是接收方", variable=self.selection_var, value="receiver", font=("Arial", 16),
bg="#f5f5f5", command=self.switch_mode).pack(pady=20)
# 按钮:生成密钥
tk.Button(self.main_frame, text="生成公钥/私钥对", font=("Arial", 16), bg="#8BC34A", fg="white", relief="raised", bd=4,
width=20, height=2, command=self.generate_keys).pack(pady=20)
# 初始显示发送方界面
self.sender_frame = None
self.receiver_frame = None
self.switch_mode()
def switch_mode(self):
"""切换模式(发送方或接收方)"""
# 清空当前界面
if self.sender_frame:
self.sender_frame.destroy()
if self.receiver_frame:
self.receiver_frame.destroy()
mode = self.selection_var.get()
if mode == "sender":
self.create_sender_frame()
elif mode == "receiver":
self.create_receiver_frame()
def create_sender_frame(self):
"""创建发送方界面"""
self.sender_frame = tk.LabelFrame(self.main_frame, text="发送文件", padx=30, pady=30, bg="#ffffff", font=("Arial", 14, "bold"))
self.sender_frame.pack(padx=30, pady=30, fill="both", expand=True)
self.filename_var = tk.StringVar()
# 选择文件按钮
tk.Button(self.sender_frame, text="选择文件", command=self.select_file,
font=("Arial", 16), bg="#4CAF50", fg="white", relief="raised", bd=4,
width=20, height=3, activebackground="#45a049").pack(padx=10, pady=15)
# 显示文件路径
self.filename_entry = tk.Entry(self.sender_frame, textvariable=self.filename_var, width=60, font=("Arial", 14), state='readonly', bd=3)
self.filename_entry.pack(padx=10, pady=15)
# 输入接收方 IP 和端口
tk.Label(self.sender_frame, text="接收方 IP:", font=("Arial", 14), bg="#ffffff").pack(pady=10)
self.receiver_ip_entry = tk.Entry(self.sender_frame, width=40, font=("Arial", 14), bd=3)
self.receiver_ip_entry.pack(pady=10)
self.receiver_ip_entry.insert(0, "192.168.1.1")
tk.Label(self.sender_frame, text="接收方端口:", font=("Arial", 14), bg="#ffffff").pack(pady=10)
self.receiver_port_entry = tk.Entry(self.sender_frame, width=40, font=("Arial", 14), bd=3)
self.receiver_port_entry.pack(pady=10)
self.receiver_port_entry.insert(0, "12345")
# 增大按钮大小
send_button = tk.Button(self.sender_frame, text="发送文件", command=self.send_file,
font=("Arial", 16), bg="#007BFF", fg="white", relief="raised", bd=4,
width=25, height=3, activebackground="#0056b3")
send_button.pack(padx=10, pady=30, fill='x')
def create_receiver_frame(self):
"""创建接收方界面"""
self.receiver_frame = tk.LabelFrame(self.main_frame, text="接收文件", padx=30, pady=30, bg="#ffffff", font=("Arial", 14, "bold"))
self.receiver_frame.pack(padx=30, pady=30, fill="both", expand=True)
# 接收文件按钮
receive_button = tk.Button(self.receiver_frame, text="接收文件", command=self.receive_file,
font=("Arial", 16), bg="#FF5722", fg="white", relief="raised", bd=4,
width=25, height=3, activebackground="#e64a19")
receive_button.pack(padx=10, pady=30, fill='x')
def generate_keys(self):
"""调用 generate_key.py 生成公钥和私钥"""
try:
# 使用 subprocess 调用 generate_key.py 生成密钥对
subprocess.run(["python", "generate_key.py"], check=True)
messagebox.showinfo("成功", "公钥和私钥已生成!")
except subprocess.CalledProcessError as e:
messagebox.showerror("错误", f"密钥生成失败:{e}")
def select_file(self):
"""选择文件"""
file_path = filedialog.askopenfilename()
if file_path:
self.filename_var.set(file_path)
def send_file(self):
"""发送文件"""
filename = self.filename_var.get()
if not filename or not os.path.exists(filename):
messagebox.showerror("错误", "请选择有效的文件!")
return
receiver_ip = self.receiver_ip_entry.get()
receiver_port = self.receiver_port_entry.get()
if not receiver_ip or not receiver_port:
messagebox.showerror("错误", "请填写接收方的 IP 和端口!")
return
try:
# 调用 sender.py 中的 send_file 函数
send_file(filename, receiver_ip, int(receiver_port), self.receiver_public_key, self.sender_private_key)
messagebox.showinfo("成功", "文件发送成功!")
except Exception as e:
messagebox.showerror("错误", f"文件发送失败:{e}")
def receive_file(self):
"""接收文件"""
try:
port = 12345
# 调用 receiver.py 中的 receive_file 函数
receive_file(port, self.receiver_private_key, self.sender_public_key)
messagebox.showinfo("成功", "文件接收成功!")
except Exception as e:
messagebox.showerror("错误", f"文件接收失败:{e}")
if __name__ == "__main__":
root = tk.Tk()
app = FileTransferApp(root)
root.mainloop()
Loading…
Cancel
Save