目录
1.认识Python
2.环境与工具
2.1 python环境
2.2 Visual Studio Code编译
3.文件上传
3.1 代码构思
3.2 服务端代码
3.3 客户端代码
3.4 运行结果
4.总结
1.认识Python
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字或标点符号,它具有比其他语言更有特色的语法结构。
2.环境与工具
2.1 python环境
在Windows上使用命令行窗口查看所安装的python版本
python --version
2.2 Visual Studio Code编译
Visual Studio Code是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和Git 版本控制系统。
3.文件上传
3.1 代码构思
建立一个文件上传程序,服务端通过IP:端口上传本地文件到服务器,然后客户端接收,使用socket套接字对象连接,用TCP协议传输信息。
3.2 服务端代码
服务端:搭建一个TCP服务器,上传文件。
import socket
import structdef send_file(filename, host='127.0.0.1', port=9999):try:# 创建一个 TCP/IP 套接字socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)socket_server.bind((host, port))socket_server.listen()print(f"服务端开始监听 {host}:{port}...")while True:# 链接socket_conn, addr = socket_server.accept()print(f"Connected by {addr}")try:with open(filename, 'rb') as f:text_content = f.read()txt_len = len(text_content)# 发送文件长度socket_conn.send(struct.pack('i', txt_len))# 文件信息socket_conn.send(text_content)print(f"Sent {filename} ({txt_len} bytes) to {addr}")except FileNotFoundError:print(f"File {filename} 没有找到。")socket_conn.send(struct.pack('i', 0))except Exception as e:print(f"Error: {e}")finally:socket_conn.close()print(f"链接 {addr} 已关闭。")except Exception as e:print(f"错误: {e}")finally:socket_server.close()print("服务端关闭。")if __name__ == '__main__':send_file('./pythonProject/1.txt') #文件路径
3.3 客户端代码
客户端:客户端代码与服务器建立 TCP 连接,接收文件并保存该文件。
import socket
import structdef receive_file(filename, host='127.0.0.1', port=9999):try:# 创建一个 TCP/IP 套接字client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect((host, port))print(f"连接到 {host}:{port}")# 获取文件长度txt_len = struct.unpack('i', client_socket.recv(4))[0]print(f"获得 {txt_len} bytes")if txt_len == 0:print(f"没有获取到文件,服务端可能不存在")return# 打开文件,并进行写操作with open(filename, 'wb') as fp:recv_len = 0while recv_len < txt_len:recv_txt = client_socket.recv(1024)recv_len += len(recv_txt)fp.write(recv_txt)print(f"获得 {recv_len} bytes. 文件: {filename} 写入成功.")except Exception as e:print(f"Error: {e}")finally:client_socket.close()print("客户端关闭。")if __name__ == '__main__':receive_file('1.txt') #接收的文件保存路径与名称
3.4 运行结果
首先运行服务端代码打开,然后运行客户端代码用于接收文件。
4.总结
此程序呈现出了局域网内文件传输的典型示例,方便大家理解局域网内文件传输的底层逻辑。
你也快来试试吧!