以下是使用Python在局域网内传输文件的几种常用方法,供您参考:
### 一、使用HTTP协议传输文件
**搭建HTTP服务器**
- 打开命令行,进入目标文件目录,执行命令:
```bash
python -m http.server 端口号
```
(端口号可选,默认8000或80)
- 在局域网内其他设备浏览器中输入 `IP地址:端口号` 访问,例如 `192.168.1.2:8080`。
**下载文件**
- 通过浏览器访问上述地址后,直接点击目标文件即可下载。
### 二、使用FTP协议传输文件
**搭建FTP服务器**
- 安装 `pyftpdlib` 库(`pip install pyftpdlib`)
- 在目标目录下运行:
```bash
python -m pyftpdlib
```
- 访问地址为 `ftp://192.168.1.2:2121`(默认端口2121),默认用户名和密码均为 `admin`。
**上传/下载文件**
- 使用浏览器访问FTP服务器后,可通过文件浏览器或命令行进行文件传输。
### 三、使用Socket编程传输文件
**服务器端代码示例**
```python
import socket
import os
def start_server(port):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', port))
server.listen(5)
print(f"Server listening on {host}:{port}")
while True:
client, addr = server.accept()
with open('received_file', 'wb') as f:
while True:
data = client.recv(1024)
if not data:
break
f.write(data)
client.close()
if __name__ == "__main__":
start_server(8080)
```
**客户端代码示例**
```python
import socket
def send_file(ip, port, filename):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
with open(filename, 'rb') as f:
while True:
data = f.read(1024)
if not data:
break
client.sendall(data)
client.close()
if __name__ == "__main__":
send_file('192.168.1.2', 8080, 'example.txt')
```
**注意事项**
- 需在局域网内两台设备上分别运行服务器和客户端。
### 四、使用共享目录(简单但效率较低)
**Windows系统**
- 在目标目录下运行:
```bash
python -m http.server 9527
```
- 访问地址为 `http://192.168.1.2:9527`。
**Linux系统**
- 编辑 `share.sh` 脚本:
```bash
#!/bin/bash
python3 -m http.server 9527
```
- 运行脚本后访问 `http://192.168.1.2:9527`。
### 五、使用第三方库(如`requests`)
若需从其他设备上传文件,可使用 `requests` 库:
```python
import requests
def upload_file(url, local_path):
with open(local_path, 'rb') as f:
response = requests.post(url, files={'file': f})
return response.text
# 示例
response = upload_file('http://192.168.1.2:8080/received_file', 'example.txt')
print(response)
```
### 总结
- **HTTP/FTP** 适合快速共享文件,操作简单;
- **Socket编程** 提供底层控制,适合定制化传输需求;
- **第三方库** (如 `requests`)适合跨平台文件上传。
根据具体需求选择合适方法,若需跨平台且简单易用,推荐使用HTTP服务器或FTP服务。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。