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

通过Python中的server()函数实现简单的文件传输服务器的方法探讨

发布时间:2023-12-18 18:53:45

在Python中,实现一个简单的文件传输服务器可以使用socket模块的socket()函数来创建一个套接字,并使用bind()listen()函数绑定并监听指定的网络地址。然后使用accept()函数接受客户端的连接请求,并使用recv()函数接收客户端发送的数据。最后,可以使用send()函数向客户端发送数据。下面是一个例子:

import socket

def file_transfer_server(host, port):
    # 创建套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 绑定并监听指定的网络地址
    server_socket.bind((host, port))
    server_socket.listen(1)  # 同时处理1个连接
    
    print("Waiting for connections...")
    
    while True:
        # 接受客户端连接
        client_socket, client_address = server_socket.accept()
        print("Connected with:", client_address)
        
        # 接收客户端发送的文件名
        filename = client_socket.recv(1024).decode()
        print("Received filename:", filename)
        
        # 打开文件并发送数据给客户端
        try:
            with open(filename, 'rb') as file:
                data = file.read()
                client_socket.send(data)
                print("File sent successfully")
        except FileNotFoundError:
            client_socket.send(b'')
            print("File not found")
        
        # 关闭连接
        client_socket.close()

# 使用示例
file_transfer_server('localhost', 8000)

在上面的代码中,我们创建了一个名为file_transfer_server()的函数,它接受主机和端口作为参数。在函数内部,我们首先创建一个套接字,并将其绑定到指定的主机和端口上,然后使用listen()函数监听连接请求。在一个无限循环中,我们使用accept()函数接受客户端的连接。一旦连接建立,我们使用recv()函数接收客户端发送的文件名,并打开相应的文件。如果文件存在,我们使用send()函数向客户端发送文件的数据。否则,我们发送一个空字节,表示文件不存在。最后,我们关闭连接。

需要注意的是,上述代码只能同时处理一个连接。如果要支持并发连接,可以使用threading模块创建多个线程来同时处理多个连接。另外,此例中的服务器只是简单地将文件内容发送给客户端,没有实现上传文件功能。如果需要上传文件,可以使用recv()函数接收客户端发送的数据,并使用write()函数将数据写入服务器端的文件。