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

使用Python实现socket通信中的文件传输功能

发布时间:2023-12-26 00:53:34

在Python中,可以使用socket模块实现基本的网络通信功能,包括文件传输。下面是一个使用socket实现文件传输的例子:

# 文件传输的服务器端
import socket

def receive_file():
    # 创建socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 绑定IP和端口
    server_socket.bind(('localhost', 8000))
    
    # 监听连接
    server_socket.listen(1)
    
    print("等待客户端连接...")
    
    # 接受客户端连接
    client_socket, client_address = server_socket.accept()
    
    print("客户端已连接:", client_address)
    
    # 接收文件名并打开文件
    file_name = client_socket.recv(1024).decode()
    file = open(file_name, 'wb')
    
    print("开始接收文件...")
    
    # 逐步接收数据并写入文件中
    while True:
        data = client_socket.recv(1024)
        if not data:
            break
        file.write(data)
    
    print("文件接收完毕!")
    
    # 关闭文件和连接
    file.close()
    client_socket.close()
    server_socket.close()

def main():
    receive_file()

if __name__ == '__main__':
    main()

# 文件传输的客户端
import socket

def send_file(file_name):
    # 创建socket对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 连接服务器
    client_socket.connect(('localhost', 8000))
    
    # 发送文件名
    client_socket.send(file_name.encode())
    
    file = open(file_name, 'rb')
    
    print("开始发送文件...")
    
    # 逐步读取文件内容并发送
    while True:
        data = file.read(1024)
        if not data:
            break
        client_socket.send(data)
    
    print("文件发送完毕!")
    
    # 关闭文件和连接
    file.close()
    client_socket.close()

def main():
    file_name = "test.txt"
    send_file(file_name)

if __name__ == '__main__':
    main()

在这个例子中,服务器端通过创建socket对象,绑定IP和端口,并监听连接。当有客户端连接时,接收文件名,并通过打开的文件将接收到的数据写入文件中。客户端通过创建socket对象,连接服务器,然后发送文件名,并通过打开的文件逐步读取文件内容,并发送给服务器。

要进行文件传输时,只需调用主函数即可,可以根据实际需求修改文件名和路径。

需要注意的是,在实际应用中,通常需要进行错误处理、断点续传等功能才能具有实际使用的价值。同时,文件传输过程中可能会出现网络异常等问题,需要进行适当的处理。此处的示例代码只是一个基础的演示,实际使用时需要考虑更多的因素。