下面是“python使用tcp实现局域网内文件传输”的攻略:
准备工作
- 确保你的电脑和接收文件的电脑在同一局域网内,可以相互通信;
- 安装Python 3.x版本;
- 确保你的防火墙或安全软件没有对文件传输进行限制。
实现步骤
- 编写服务端代码
服务端代码主要用来监听客户端发送的请求和获取客户端发送的文件数据。在监听到客户端发送文件请求后,服务端会创建一个新的线程接收文件数据。
示例代码:
import socket
import threading
def recv_file(conn):
filename = conn.recv(1024).decode() # 接收文件名
with open(filename, 'wb') as f:
while True:
data = conn.recv(1024)
if not data:
break
f.write(data)
print('文件接收完毕!')
def start_server():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 8000))
s.listen(5)
print('服务端已经启动,监听端口8000...')
while True:
conn, addr = s.accept()
t = threading.Thread(target=recv_file, args=(conn,))
t.start()
- 编写客户端代码
客户端代码主要用来向服务端发送文件数据。在发送数据之前,客户端会先发送文件名给服务端,服务端接收到文件名后会根据文件名创建文件并等待客户端发送数据。
示例代码:
import socket
def send_file(filename, ip, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))
s.send(filename.encode()) # 发送文件名
with open(filename, 'rb') as f:
while True:
data = f.read(1024)
if not data:
break
s.sendall(data)
s.close()
print('文件发送完成!')
if __name__ == '__main__':
filename = 'test.txt'
ip = '192.168.0.101'
port = 8000
send_file(filename, ip, port)
示例说明
下面是两个示例说明:
示例1
假设服务端IP地址为192.168.0.100,客户端IP地址为192.168.0.101,在服务端上运行以下命令:
python server.py
在客户端上运行以下命令:
python client.py
客户端会将当前目录下的test.txt文件发送给服务端。
示例2
假设服务端IP地址为192.168.0.100,客户端IP地址为192.168.0.101,在客户端上运行以下命令:
python client.py test.pdf 192.168.0.100 8000
客户端会将当前目录下的test.pdf文件发送给服务端的IP地址为192.168.0.100,监听端口为8000的服务端。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python使用tcp实现局域网内文件传输 - Python技术站