您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python使用tcp传输图片数据

51自学网 2021-10-30 22:27:08
  python
这篇教程python使用tcp传输图片数据写得很实用,希望能帮到您。

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

数据包格式如下

客户端:

import socketimport 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 socketserverimport osimport sysimport timeimport 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()

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


分析如何在Python中解析和修改XML
python持久化存储文件操作方法
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。