龙空技术网

50.Python——基于UDP的实现网络图像发送和接收

UNET 861

前言:

而今姐妹们对“python 传输图片”大体比较看重,朋友们都想要学习一些“python 传输图片”的相关文章。那么小编同时在网上汇集了一些有关“python 传输图片””的相关文章,希望大家能喜欢,姐妹们快快来学习一下吧!

在上一篇文中,演示了如何在Python中使用UDP来建立服务端和客户端程序,并且相互通讯,具体实现过程参看:49.Python——UDP的服务器与客户端的使用。

本文通过一个如何实现图像文件的发送和接收进一步理解和体会UDP是如何工作和使用的。

这里有一个重要注意:就是在网络传输发送接收数据是以bytes进行。而不是string。如果是字符串,则需要用encode编码。

有关图像的编码解码,可以参看:12.图像编码解码-imencode-imdecode-base64

实现目的:把服务端上的一张小狗图片,发送到客户端,打开并且保存到客户端。

一、UDP服务端实现

import socket,timeimport cv2#第二参数:socket.SOCK_DGRAM代表UDPs=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#绑定服务器主机和端口,如果主机为空,表示任意主机。s.bind(("",8888))print("服务器准备就绪,等待客户端连接...")img=cv2.imread("dog.jpg") #读取服务端的小狗图片img_encode=cv2.imencode(".jpg",img)[1] #图像编码byte_encode=img_encode.tobytes() #图像编码转成bytes,用于网络传输#循环发送while 1:    data,address=s.recvfrom(1024*1024) #接收客户端发送的数据    print("来自UDP Client 的发送信息:",repr(data.decode()))    #把图像编码bytes数据发送到客户端    s.sendto(byte_encode,address)    time.sleep(1)    
二、客户端实现
import socketimport cv2import numpy as nps=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)msg="连接中..."HOST="192.168.1.1" #这里是服务端的IP地址,根据实际情况填写PORT=8888  #连接服务端的端口,根据实际情况填写#发起连接s.sendto(msg.encode(),(HOST,PORT))data,address=s.recvfrom(1024*1204)   #接收服务器端发送的数据print(len(data))#把接收到的图像编码bytes数据进行解码nparray=np.frombuffer(data,np.uint8)img_decode=cv2.imdecode(nparray,cv2.IMREAD_COLOR)print(img_decode.shape)#保存图片文件到本地cv2.imwrite("dog.jpg",img_decode)#显示图片cv2.imshow("img",img_decode)cv2.waitKey(0)cv2.destroyAllWindows()
三、运行测试

服务器等待连接

客户端收到图像数据,解码保存和显示

标签: #python 传输图片