implementación de Python usando una transferencia de archivos toma de fotografías y video

En este artículo se describe la implementación de un archivo usando sockets pitón de transferencia de fotos y de vídeo, el documento proporciona un ejemplo del código, amigos necesidad puede referirse a
la necesidad de desarrollar algunas aplicaciones de comunicación de red a menudo utilizan una variedad de protocolos de red la comunicación, bloggers en el desarrollo de robots de laboratorio se enfrentarían a la necesidad de recoger las imágenes en la parte trasera del robot al servidor para el procesamiento de la identificación, implementación en Python de la siguiente manera (sólo publicado el código de la llave)

Del lado del servidor

LOCAL_IP = '192.168.100.22'  #本机在局域网中的地址,或者写127.0.0.1
PORT = 2567          #指定一个端口
def server():
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # socket.AF_INET 指ipv4 socket.SOCK_STREAM 使用tcp协议
  sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #设置端口
  sock.bind((LOCAL_IP, PORT))    #绑定端口
  sock.listen(3)          #监听端口
  while True:
    sc,sc_name = sock.accept()  #当有请求到指定端口是 accpte()会返回一个新的socket和对方主机的(ip,port)
    print('收到{}请求'.format(sc_name))
    infor = sc.recv(1024)    #首先接收一段数据,这段数据包含文件的长度和文件的名字,使用|分隔,具体规则可以在客户端自己指定
    length,file_name = infor.decode().split('|')
    if length and file_name:
      newfile = open('image/'+str(random.randint(1,10000))+'.jpg','wb') #这里可以使用从客户端解析出来的文件名
      print('length {},filename {}'.format(length,file_name))
      sc.send(b'ok')  #表示收到文件长度和文件名
      file = b''
      total = int(length)
      get = 0
      while get < total:     #接收文件
        data = sc.recv(1024)
        file += data
        get = get + len(data)
      print('应该接收{},实际接收{}'.format(length,len(file)))
      if file:
        print('acturally length:{}'.format(len(file)))
        newfile.write(file[:])
        newfile.close()
        sc.send(b'copy')  #告诉完整的收到文件了
    sc.close()

cliente

address = ('192.168.100.22', 2567)
def send(photos):
  for photo in photos[0]:
    print('sending {}'.format(photo))
    data = file_deal(photo)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(address)
    sock.send('{}|{}'.format(len(data), file).encode())  #默认编码 utf-8,发送文件长度和文件名
    reply = sock.recv(1024)
    if 'ok' == reply.decode():       #确认一下服务器get到文件长度和文件名数据
      go = 0
      total = len(data)
      while go < total:            #发送文件
        data_to_send = data[go:go + 1024]
        sock.send(data_to_send)
        go += len(data_to_send)
      reply = sock.recv(1024)
      if 'copy' == reply.decode():
        print('{} send successfully'.format(photo))
    sock.close()           #由于tcp是以流的形式传输数据,我们无法判断开头和结尾,简单的方法是没传送一个文件,就使用一个socket,但是这样是消耗计算机的资源,博主正在探索更好的方法,有机会交流一下
def file_deal(file_path):  #读取文件的方法
  mes = b''
  try:
    file = open(file_path,'rb')
    mes = file.read()
  except:
    print('error{}'.format(file_path))
  else:
    file.close()
    return mes

resumen

Lo anterior es una pequeña serie de pitón a introducir el uso de sockets de transferencia de aplicación imágenes y archivos de vídeo, queremos ayuda
contenido en más de cuántos, y finalmente a recomendar una buena reputación en el número de universidades públicas [] programadores, hay una gran cantidad de veteranos aprendiendo

Habilidades, experiencia, habilidades de la entrevista, la experiencia laboral y otra cuota de aprendizaje, la prepararon con más cuidado la basada en cero información introductoria, información sobre proyectos reales,

El método tiene programador temporizado Python explicar la tecnología cotidiana, para compartir algunas de las letras y la necesidad de prestar atención a los pequeños detallesAquí Insertar imagen Descripción

Publicado 64 artículos originales · elogios ganado 13 · Vistas a 50000 +

Supongo que te gusta

Origin blog.csdn.net/chengxun02/article/details/105151193
Recomendado
Clasificación