使用 Python 通过 TCP Socket 进行文件传输

2025 年 1 月 11 日 | 阅读 5 分钟

什么是 FTP(文件传输协议)?

FTP(文件传输协议)是一种网络协议,用于在传输控制协议或协议/互联网协议(TCP/IP)连接上传输计算机之间的文件。在 TCP/IP 套件中,FTP 被视为应用层协议。在 FTP 传输中,终端用户的计算机通常称为本地主机。参与 FTP 的第二个计算机称为远程主机,通常是服务器。两台计算机必须通过网络连接并进行适当配置才能通过 FTP 传输文件。服务器必须设置为运行 FTP 服务,并且用户必须安装 FTP 软件才能访问这些服务。

虽然许多文件传输可以使用超文本传输协议(HTTP)—— TCP/IP 套件中的另一个协议——来完成,但 FTP 仍通常用于在后台为各种应用程序(如金融服务)传输文件。有时也用于通过互联网浏览器下载新应用程序。FTP 是一种标准网络协议,可以实现跨 IP 网络的广泛文件传输功能。没有 FTP,文件和数据传输可以通过其他网络进行——例如,电子邮件或 HTTP Web 服务——但这些其他选项缺乏 FTP 所提供的专注性、准确性和控制力。

FTP 用于在系统之间传输文件,并且有一些常见用例,包括以下:

  • 备份服务或个人用户可以使用 FTP 将数据从一个位置备份到运行 FTP 服务的备份服务器。
  • 与备份一样,复制涉及将数据从一个系统复制到另一个系统,但它采取更全面的方法来提供更高的可用性和弹性。FTP 也可以用于协助此操作。
  • 访问和数据加载。 FTP 通常还用作访问共享 Web 主机和云服务的组件,用于将数据加载到远程系统。

TCP-SERVER.py:服务器端实现

我们首先导入 socket 库并创建一个简单的套接字。AF_INET 指的是地址族 ipv4。SOCK_STREAM 表示面向连接的 TCP 协议。之后,我们将主机地址和端口号绑定到服务器。

客户端输入所需的最大客户端连接数。根据输入,我们确定存储客户端的数组的大小,称为 Connections。然后,服务器继续监听客户端连接,如果找到,则将它们添加到 Connections 数组中。它这样做直到 Connections 数组达到其最大容量。然后,对于每个连接,开始处理。

  • 接收数据然后进行解码。
  • 如果数据有效,服务器将创建一个名为 "Output<a unique number>.txt" 的文件并将其写入其中。
  • 这个过程一直持续到所有数据都写入文件。
  • 上述过程对所有客户端都发生,然后关闭连接。因此,我们可以在服务器端获得一个具有相同内容的新文件。

TCP-server.py 代码

TCP-CLIENT.py:客户端实现

我们首先为客户端创建一个套接字,并使用包含主机地址和端口号的元组将其连接到服务器。然后,客户端输入它需要发送到服务器的文件名。之后,使用 Python 的 open() 函数读取文件的内容。数据逐行读取,然后编码为二进制并通过 socket.send() 发送给服务器。发送数据完成后,文件被关闭。它会一直请求文件名,直到客户端连接被终止。

代码

输出

我们首先使用命令运行服务器。

python tcp-server.py

File Transfer using TCP Socket in Python

服务器端结果

之后,我们指定可能的最大客户端连接数。

  • 客户端连接被初始化,即 Connections 数组的大小为 2,用于存储客户端。
  • 之后,我们打开另一个终端并使用命令运行客户端。

python tcp-client.py

我们可以在终端中运行该命令的最大标签数是 2。因为我们正在使用此来初始化我们的客户端。所以我们创建两个客户端 Client 1 和 Client 2。

File Transfer using TCP Socket in Python

客户端结果

当客户端运行时,我们在服务器端看到“已连接客户端 1”的结果,表明与第一个客户端的连接已成功完成。第二个客户端也是如此。

之后,在客户端,我们提供要发送的文件名。这里 file1.txt 由两个客户端发送。file1.txt 的内容显示如下。

File Transfer using TCP Socket in Python

发送到服务器的文件

请注意,在客户端,我们继续显示提示:“输入您要发送的文件名:”,以便客户端可以发送多个文件。当客户端连接断开时,通过在终端中按“Ctrl+C”,在服务器端会生成一个名为 Output<a number>.txt 的新文件,其中包含相同的内容,然后关闭连接。在这里,Client 1 的文件存储为 Output0.txt,Client 2 的文件存储为 Ouput1.txt。

File Transfer using TCP Socket in Python

从客户端 1 接收的文件

File Transfer using TCP Socket in Python

从客户端 2 接收的文件