python使用tcp传输图片数据

本文实例为大家分享了python使用tcp传输图片数据的具体代码,供大家参考,具体内容如下

数据包格式如下

客户端:

import socket
import sys

HOST,PORT = "172.18.0.3",19984

def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((HOST, PORT))

    #包头标志
    arrBuf = bytearray(b'\xff\xaa\xff\xaa')

    #以二进制方式读取图片
    picData = open('1.jpg', 'rb')
    picBytes = picData.read()

    #图片大小
    picSize = len(picBytes)

    #数据体长度 = guid大小(固定) + 图片大小
    datalen = 64 + picSize

    #组合数据包
    arrBuf += bytearray(datalen.to_bytes(4, byteorder='little'))
    guid = 23458283482894382928948
    arrBuf += bytearray(guid.to_bytes(64, byteorder='little'))
    arrBuf += picBytes

    sock.sendall(arrBuf)
    sock.close()

if __name__ == '__main__':
    main()

服务端:

import socketserver
import os
import sys
import time
import threading

ip_port=("172.18.0.3",19984)

class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        print("conn is :",self.request) # conn
        print("addr is :",self.client_address) # addr

        while True:
            try:
                self.str = self.request.recv(8)
                data = bytearray(self.str)
                headIndex = data.find(b'\xff\xaa\xff\xaa')
                print(headIndex)

                if headIndex == 0:
                    allLen = int.from_bytes(data[headIndex+4:headIndex+8], byteorder='little')
                    print("len is ", allLen)

                    curSize = 0
                    allData = b''
                    while curSize < allLen:
                        data = self.request.recv(1024)
                        allData += data
                        curSize += len(data)

                    print("recv data len is ", len(allData))
                    #接收到的数据,前64字节是guid,后面的是图片数据
                    arrGuid = allData[0:64]
                    #去除guid末尾的0
                    tail = arrGuid.find(b'\x00')
                    arrGuid = arrGuid[0:tail]
                    strGuid = str(int.from_bytes(arrGuid, byteorder = 'little')) #for test

                    print("-------------request guid is ", strGuid)
                    imgData = allData[64:]
                    strImgFile = "2.jpg"
                    print("img file name is ", strImgFile)

                    #将图片数据保存到本地文件
                    with open(strImgFile, 'wb') as f:
                        f.write(imgData)
                        f.close()

                    break
            except Exception as e:
                print(e)
                break

if __name__ == "__main__":
    s = socketserver.ThreadingTCPServer(ip_port, MyServer)
    print("start listen")
    s.serve_forever()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用python实现http及ftp服务进行数据传输的方法

    服务器之间的http数据传输 直接使用python内置的http服务: python -m SimpleHTTPServer 8000 此时,输入指令的目录就已经开启了http服务,8000为端口(如不指定,默认为8000),如果我们需要在其他机器下垃取该目录下的文件,只需在目标机器运行: wget ip:port/文件名 速度杠杆的. 开启ftp上传文件 安装ftp的python第三方组件 pip install pyftpdlib 编写启动脚本 from pyftpdlib.authoriz

  • Python爬虫抓取手机APP的传输数据

    大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1.抓取APP数据包 方法详细可以参考这篇博文:Fiddler如何抓取手机APP数据包 得到超级课程表登录的地址:http://120.55.151.61/V2/StudentSkip/loginCheckV4.action 表单: 表单中包括了用户名和密码,当然都是加密过了的,还有一个设备信息,直接post过去就是. 另外必须加header,一开始我没有加header得

  • python网络编程之数据传输UDP实例分析

    本文实例讲述了python网络编程之数据传输UDP实现方法.分享给大家供大家参考.具体分析如下: 一.问题: 你觉得网络上像msn,qq之类的工具在多台机器之间互相传输数据神秘吗?你也想玩一下在两台机器之间传数据吗?今天让python告诉我们基本原理吧,当然只是做简单的了解,实际情况复杂的多.      我们今天用python实现一个简单的udp程序. 二.程序实现: 1) 使用模块 (socket)套接字模块: 套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问

  • 在python环境下运用kafka对数据进行实时传输的方法

    背景: 为了满足各个平台间数据的传输,以及能确保历史性和实时性.先选用kafka作为不同平台数据传输的中转站,来满足我们对跨平台数据发送与接收的需要. kafka简介: Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现.kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外ka

  • python 中Arduino串口传输数据到电脑并保存至excel表格

    起因:学校运河杯报了个项目,制作一个天气预测的装置.我用arduino跑了BME280模块,用蓝牙模块实现两块arduino主从机透传.但是为了分析,还需要提取出数据.因此我用python写了个上位机程序,用pyserial模块实现arduiho和电脑的串口通讯,再用xlwt模块写入excel表格,用time模块获取时间作为excel的文件名. import xlwt import time import serial #设置表格样式 def set_style(name,height,bold

  • python实现udp数据报传输的方法

    本文实例讲述了Python实现UDP数据报传输的方法,非常具有实用价值.分享给大家供大家参考.具体方法分析如下: 服务端代码: import socket port = 8081 s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #从给定的端口,从任何发送者,接收UDP数据报 s.bind(("",port)) print 'waiting on port:',port while True: data,addr = s.recvf

  • 对python中基于tcp协议的通信(数据传输)实例讲解

    阅读目录 tcp协议:流式协议(以数据流的形式通信传输).安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在OSI七层协议中属于传输层,它上承用户层的数据收发,下启网络层.数据链路层.物理层.可以说很多安全数据的传输通信都是基于tcp协议进行的. 为了让tcp通信更加方便需要引入一个socket模块(将网络层.数据链路层.物理层封装的模块),我们只要调用模块中的相关接口就能实现传输层下面的繁琐操作. 简单的tcp协议通信模板:(需要一个服务端和一个客户端) 服务

  • python使用tcp传输图片数据

    本文实例为大家分享了python使用tcp传输图片数据的具体代码,供大家参考,具体内容如下 数据包格式如下 客户端: import socket import sys HOST,PORT = "172.18.0.3",19984 def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) #包头标志 arrBuf = bytearray(b'\xff\xa

  • python设计tcp数据包协议类的例子

    一. 问题描述 在tcp编程中,最需要解决的就是粘包分包问题.所以,我们需要在每个数据包前面加上数据包的长度用以分割粘连的包. 二. 包结构的设计 包的组成:包长度+数据域 包长度:用4个字节存储数据域长度,数据域长度即为其所占字节数 数据域:由若干个变量组成,如果是定长变量则不用加变量长度 定长变量:我们人为规定,传输中的int为4字节定长变量 变长变量:那就是字符串啦 文字难理解,那我就画个图吧: 上图的第一行是数据包的一个总体结构 第二行是数据域内部的一个结构(数据域的变量数量和位置都是我

  • python 使用socket传输图片视频等文件的实现方式

    在开发一些需要网络通信的应用中,经常会用到各种网络协议进行通信,博主在开发实验室的机器人的时候就遇到了需要把机器人上采集到的图片传回服务器进行处理识别,在python下的实现方式如下(只贴出了关键代码) 服务器端 LOCAL_IP = '192.168.100.22' #本机在局域网中的地址,或者写127.0.0.1 PORT = 2567 #指定一个端口 def server(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  • python实现udp传输图片功能

    本文实例为大家分享了python实现udp传输图片的具体代码,供大家参考,具体内容如下 首先要了解UDP的工作模式 对于服务器,首先绑定IP和端口,本机测试的时候可以使用127.0.0.1是本机的专有IP,端口号 大于1024的是自定义的,所以用大于1024的端口号,然后接收客户端数据,处理,返回 对于客户端,UDP不用建立连接,只管发送不管接收到没有,所以可以直接对服务器的IP地址和端口号发送信息,然后等待应答. 注意传输的数据是二进制流数据,所以要找方法把需要传输的数据编码成二进制码流,传过

  • 使用python实现tcp自动重连

    操作系统: CentOS 6.9_x64 python语言版本: 2.7.13 问题描述 现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连. 测试服务器示例代码: https://github.com/mike-zhang/pyExamples/blob/master/socketRelate/tcpServer1_multithread.py 解决方案 ''' tcp client with reconnect E-Mail : Mike_Zhang@

  • 详解python中TCP协议中的粘包问题

    TCP协议中的粘包问题 1.粘包现象 基于TCP实现一个简易远程cmd功能 #服务端 import socket import subprocess sever = socket.socket() sever.bind(('127.0.0.1', 33521)) sever.listen() while True: client, address = sever.accept() while True: try: cmd = client.recv(1024).decode('utf-8') p

  • python使用tcp实现局域网内文件传输

    本文为大家分享了python使用tcp实现局域网内文件传输的具体代码,供大家参考,具体内容如下 功能: 可以利用python创建的TCP客户端从我们自己搭建的TCP服务器上下载文件. 实现需求: 安装socket模块 简单了解sokcet模块用法 服务器代码如下: import socket def file_deal(file_name): # 定义函数用于处理用户索要下载的文件 try: # 二进制方式读取 files = open(file_name, "rb") mes = f

  • Python基于TCP实现会聊天的小机器人功能示例

    本文实例讲述了Python基于TCP实现会聊天的小机器人功能.分享给大家供大家参考,具体如下: 一 代码 1.服务端程序 import socket words ={'how are you?':'Fine,thank you.', 'how old are you?':'38', 'what is your name?':'Dong FuGuo', "what's your name?":'Dong FuGuo', 'where do you work?':'SDIBT', 'bye

  • python基于TCP实现的文件下载器功能案例

    本文实例讲述了python基于TCP实现的文件下载器功能.分享给大家供大家参考,具体如下: 服务器 参考代码如下: from socket import * import sys def get_file_content(file_name): """获取文件的内容""" try: with open(file_name, "rb") as f: content = f.read() return content except

  • python实现TCP文件接收发送

    本文实例为大家分享了python实现TCP文件接收发送的具体代码,供大家参考,具体内容如下 下一篇分享:udp收发的实现 先运行服务器端打开接收,在运行客服端发送文件 还有记得改一下ip哟 1.发送 根据自己需求修改,简单局域网下完成文件收发 客户端 # 由客户端向服务器传数据,文件 import socket import tqdm import os def send(filename): # 传输数据间隔符 SEPARATOR = '<SEPARATOR>' # 服务器信息 host =

随机推荐