本文目录导读:

Python HTTP服务器(最简单)
Windows/Linux/macOS通用
# file_share.py
import http.server
import socketserver
import os
import sys
def start_share(port=8000, directory=None):
if directory:
os.chdir(directory)
handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", port), handler) as httpd:
print(f"文件共享服务器已启动")
print(f"局域网访问地址: http://{get_local_ip()}:{port}")
print(f"按 Ctrl+C 停止服务")
httpd.serve_forever()
def get_local_ip():
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.connect(('10.255.255.255', 1))
ip = s.getsockname()[0]
except Exception:
ip = '127.0.0.1'
finally:
s.close()
return ip
if __name__ == "__main__":
start_share()
运行方式:
# 共享当前目录 python file_share.py # 共享指定目录 python file_share.py --directory /path/to/share --port 8000
Windows内置SMB共享脚本
PowerShell脚本
# setup-smb-share.ps1
param(
[string]$SharePath,
[string]$ShareName = "SharedFolder",
[string]$Description = "局域网共享文件夹"
)
# 以管理员运行
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Write-Host "请以管理员身份运行此脚本" -ForegroundColor Red
pause
exit 1
}
# 创建共享文件夹
if (-not (Test-Path $SharePath)) {
New-Item -ItemType Directory -Path $SharePath -Force
Write-Host "创建文件夹: $SharePath" -ForegroundColor Green
}
# 设置Everyone权限
$acl = Get-Acl $SharePath
$permission = "Everyone","FullControl","ContainerInherit,ObjectInherit","None","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
Set-Acl $SharePath $acl
# 创建SMB共享
New-SmbShare -Name $ShareName -Path $SharePath -Description $Description -FullAccess Everyone
# 获取本机IP
$ip = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -like "*Ethernet*" -or $_.InterfaceAlias -like "*Wi-Fi*"}).IPAddress
Write-Host "`nSMB共享已创建!" -ForegroundColor Green
Write-Host "共享路径: \\$ip\$ShareName" -ForegroundColor Yellow
Write-Host "本地路径: $SharePath" -ForegroundColor Cyan
使用方法:
# 以管理员运行 .\setup-smb-share.ps1 -SharePath "C:\SharedFolder" -ShareName "MyShare"
跨平台Python GUI工具
# lan_file_share.py
import tkinter as tk
from tkinter import filedialog, messagebox
import http.server
import socketserver
import threading
import socket
import os
class FileShareApp:
def __init__(self, root):
self.root = root
self.root.title("局域网文件共享工具")
self.root.geometry("400x300")
self.share_folder = tk.StringVar()
self.port = tk.StringVar(value="8000")
self.server = None
self.create_widgets()
def create_widgets(self):
# 选择文件夹
tk.Label(self.root, text="选择共享文件夹:").pack(pady=5)
frame1 = tk.Frame(self.root)
frame1.pack(pady=5)
tk.Entry(frame1, textvariable=self.share_folder, width=30).pack(side=tk.LEFT, padx=5)
tk.Button(frame1, text="浏览", command=self.browse_folder).pack(side=tk.LEFT)
# 端口设置
tk.Label(self.root, text="端口号:").pack(pady=5)
tk.Entry(self.root, textvariable=self.port, width=10).pack()
# 控制按钮
self.start_btn = tk.Button(self.root, text="启动共享", command=self.toggle_share,
bg="green", fg="white", width=20)
self.start_btn.pack(pady=20)
# 状态显示
self.status_label = tk.Label(self.root, text="状态: 未启动", fg="red")
self.status_label.pack(pady=10)
# IP地址显示
self.ip_label = tk.Label(self.root, text=f"本机IP: {self.get_local_ip()}")
self.ip_label.pack(pady=5)
def browse_folder(self):
folder = filedialog.askdirectory()
if folder:
self.share_folder.set(folder)
def get_local_ip(self):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.connect(('10.255.255.255', 1))
ip = s.getsockname()[0]
except:
ip = '127.0.0.1'
finally:
s.close()
return ip
def toggle_share(self):
if self.server is None:
self.start_share()
else:
self.stop_share()
def start_share(self):
folder = self.share_folder.get()
if not folder:
messagebox.showerror("错误", "请选择共享文件夹")
return
try:
port = int(self.port.get())
except:
messagebox.showerror("错误", "端口号必须是数字")
return
if not os.path.exists(folder):
messagebox.showerror("错误", "文件夹不存在")
return
# 在新线程中启动服务器
def run_server():
os.chdir(folder)
handler = http.server.SimpleHTTPRequestHandler
self.server = socketserver.TCPServer(("", port), handler)
self.server.serve_forever()
self.server_thread = threading.Thread(target=run_server, daemon=True)
self.server_thread.start()
self.start_btn.config(text="停止共享", bg="red")
self.status_label.config(text=f"状态: 运行中 - http://{self.get_local_ip()}:{port}", fg="green")
def stop_share(self):
if self.server:
self.server.shutdown()
self.server.server_close()
self.server = None
self.start_btn.config(text="启动共享", bg="green")
self.status_label.config(text="状态: 已停止", fg="red")
if __name__ == "__main__":
root = tk.Tk()
app = FileShareApp(root)
root.mainloop()
Linux快速脚本
#!/bin/bash
# fast-share.sh
# 检查参数
if [ $# -lt 1 ]; then
echo "用法: ./fast-share.sh <共享目录> [端口号]"
echo "示例: ./fast-share.sh /home/user/share 8080"
exit 1
fi
SHARE_DIR="$1"
PORT="${2:-8000}"
# 检查目录
if [ ! -d "$SHARE_DIR" ]; then
echo "错误: 目录 $SHARE_DIR 不存在"
exit 1
fi
# 获取本机IP
IP=$(hostname -I | awk '{print $1}')
# 启动Python HTTP服务器
echo "========================================="
echo " 局域网文件共享已启动"
echo " 共享目录: $SHARE_DIR"
echo " 访问地址: http://$IP:$PORT"
echo " 按 Ctrl+C 停止共享"
echo "========================================="
cd "$SHARE_DIR"
python3 -m http.server $PORT --bind 0.0.0.0
使用Python发送文件的简易工具
# send_file.py
import socket
import os
import threading
def send_file(file_path, host='0.0.0.0', port=9999):
"""发送文件到局域网"""
def handle_client(conn, addr):
print(f"客户端连接: {addr}")
try:
file_size = os.path.getsize(file_path)
file_name = os.path.basename(file_path)
# 发送文件名和文件大小
conn.send(f"{file_name}:{file_size}".encode())
# 等待确认
conn.recv(1024)
# 发送文件内容
with open(file_path, 'rb') as f:
while True:
data = f.read(4096)
if not data:
break
conn.send(data)
print(f"文件 {file_name} 发送完成")
except Exception as e:
print(f"发送错误: {e}")
finally:
conn.close()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen(5)
print(f"文件服务器启动在 {host}:{port}")
print("等待客户端连接...")
while True:
conn, addr = server.accept()
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start()
def receive_file(save_dir='.', host='localhost', port=9999):
"""接收文件"""
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
# 接收文件名和大小
data = client.recv(1024).decode()
file_name, file_size = data.split(':')
file_size = int(file_size)
# 发送确认
client.send(b'OK')
# 接收文件
save_path = os.path.join(save_dir, file_name)
received = 0
with open(save_path, 'wb') as f:
while received < file_size:
data = client.recv(4096)
if not data:
break
f.write(data)
received += len(data)
print(f"文件 {file_name} 接收完成")
client.close()
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print("用法:")
print(" 发送: python send_file.py send <文件路径>")
print(" 接收: python send_file.py receive <保存目录>")
sys.exit(1)
if sys.argv[1] == "send":
send_file(sys.argv[2])
elif sys.argv[1] == "receive":
save_dir = sys.argv[2] if len(sys.argv) > 2 else "."
receive_file(save_dir)
使用说明
- 最简方案:使用Python HTTP服务器,无需安装额外软件
- Windows专用:使用PowerShell SMB共享,性能更好
- 图形界面:适合不熟悉命令行的用户
- 快速传输:使用socket直接传输文件
根据您的需求选择合适的方案即可,最推荐使用Python HTTP服务器方案,因为它简单、跨平台、无需额外软件。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播