客户端向服务端传送图片视频等文件

import socket
import os
import sys
import struct

这些是导入所需的 Python 模块。socket 用于创建网络套接字,os 提供了与操作系统交互的功能,sys 提供了对 Python 解释器的访问和控制,struct 用于处理二进制数据的打包和解包。

def sock_client_image():
    while True:
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect(('192.168.8.183', 6666))
        except socket.error as msg:
            print(msg)
            print(sys.exit(1))

这是定义了一个名为 sock_client_image 的函数,用于发送图片到服务器。在函数内部,它使用 socket.socket 创建了一个 TCP 套接字对象 s,然后使用 s.connect 方法连接到指定的服务器 IP 地址和端口号。如果连接失败,将打印错误消息并退出程序。

        filepath = input('input the file:')
        fhead = struct.pack(b'128sq', bytes(os.path.basename(filepath), encoding='utf-8'),
                            os.stat(filepath).st_size)
        s.send(fhead)

这部分代码用于获取要发送的图片文件的路径,并将文件名和文件大小打包成一个结构体 fheados.path.basename 函数用于获取文件名,os.stat 函数用于获取文件大小。然后,使用 struct.pack 将文件名和文件大小打包成二进制数据,并使用 s.send 方法将结构体发送给服务器。

        fp = open(filepath, 'rb')
        while True:
            data = fp.read(1024)
            if not data:
                print('{0} send over...'.format(filepath))
                break
            s.send(data)
        s.close()

这部分代码打开要发送的图片文件,并使用循环逐块读取图片文件的数据。每次读取 1024 字节的数据,并使用 s.send 方法将数据发送给服务器。循环会一直执行,直到读取完整个文件。最后,关闭套接字连接。

请注意,这段代码是一个简单的示例,仅涵盖了图片文件的发送部分。您需要在服务器端实现对应的接收代码来接收并保存传输的图片文件

了解struct内置库

struct 是 Python 内置的一个模块,它提供了用于处理二进制数据的打包和解包的功能。在图片上传的过程中,struct 的作用是将文件名和文件大小打包成一个二进制数据结构,以便在网络中传输。

具体来说,这段代码中的 struct.pack 函数用于将文件名和文件大小打包成一个二进制数据。它的第一个参数是格式字符串,指定了要打包的数据的类型和顺序。在这里,'128sq' 是格式字符串,它表示要打包的数据有两部分,第一部分是一个长度为 128 字节的字符串,第二部分是一个长整型数。

第二个参数是一个元组,包含了要打包的数据。在这里,bytes(os.path.basename(filepath), encoding='utf-8') 是文件名的字节表示,os.path.basename(filepath) 用于获取文件名,并通过 bytes 函数将其转换为字节类型。os.stat(filepath).st_size 是文件大小。

打包后的二进制数据可以通过网络发送到服务器,然后在服务器端使用相应的解包操作来提取文件名和文件大小。

总而言之,struct 在图片上传的过程中的作用是将相关的文件信息打包成二进制数据,以便在网络中传输,并在接收端进行解包操作以获取文件信息

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值