欢迎访问宙启技术站
智能推送

使用socks和socksocket()在Python中实现网络文件传输

发布时间:2024-01-01 09:10:15

Python中的socket模块提供了一个用于网络通信的基本接口。使用socket可以实现网络文件传输。

首先,我们需要创建一个服务器端和一个客户端。请将下面的代码分别保存为server.py和client.py文件。

**server.py**

import socket

def receive_file():
    # 创建一个TCP/IP套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定服务器地址和端口号
    server_address = ('localhost', 8000)
    server_socket.bind(server_address)

    # 监听连接请求
    server_socket.listen(1)

    print('等待客户端连接...')
    client_socket, client_address = server_socket.accept()
    print('客户端已连接:', client_address)

    # 接收文件名
    filename = client_socket.recv(1024).decode()
    print('接收到文件名:', filename)

    # 打开文件,准备接收数据
    with open(filename, 'wb') as file:
        while True:
            # 从客户端接收数据
            data = client_socket.recv(1024)
            if not data:
                break
            # 写入文件
            file.write(data)

    print('文件接收完成,路径为:', filename)

    # 关闭套接字
    client_socket.close()
    server_socket.close()

if __name__ == "__main__":
    receive_file()

**client.py**

import socket

def send_file(filename):
    # 创建一个TCP/IP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 将套接字连接到服务器地址和端口号
    server_address = ('localhost', 8000)
    client_socket.connect(server_address)

    print('已连接到服务器:', server_address)

    # 发送文件名
    client_socket.send(filename.encode())
    print('已发送文件名:', filename)

    # 打开文件,准备发送数据
    with open(filename, 'rb') as file:
        while True:
            # 读取文件数据
            data = file.read(1024)
            if not data:
                break
            # 发送数据到服务器
            client_socket.send(data)

    print('文件发送完成')

    # 关闭套接字
    client_socket.close()

if __name__ == "__main__":
    filename = 'example.txt' #要发送的文件名
    send_file(filename)

在这个例子中,我们首先创建了一个服务器套接字,绑定到本地地址和一个指定的端口号。然后服务器进入监听状态,等待客户端的连接请求。一旦接收到客户端的连接请求,服务器就在另一个套接字上建立一个连接,该套接字用于与客户端进行通信。服务器接收客户端发送的文件名,并创建一个新文件以保存接收到的数据。然后服务器循环接收客户端发送的数据,并写入文件,直到接收完整个文件。完成后,服务器关闭连接。

客户端程序首先创建一个套接字,并连接到服务器的地址和端口号。然后客户端发送要传输的文件名给服务器,服务器接收到文件名后,会创建一个新的文件以保存接收到的数据。然后客户端循环读取文件数据,并发送到服务器,直到发送完整个文件。发送完成后,客户端关闭连接。

要运行这个例子,首先运行server.py,然后再运行client.py。确保文件example.txt存在于当前目录下。运行客户端后,服务器会接收到客户端发送的文件,并保存到服务器端的当前目录下。

通过这个例子,我们可以学会使用socks和socksocket()在Python中实现网络文件传输。这种方式可以实现客户端和服务器之间的文件传输,可以用于需要从一个系统传输文件到另一个系统的场景,或者用于在多个计算机之间进行文件共享。