首页 > 编程语言 >python实现客户端和服务端的UDP相互通信

python实现客户端和服务端的UDP相互通信

时间:2023-02-25 21:35:21浏览次数:64  
标签:UDP img python cv2 50 client data 服务端 客户端

实验指南

这篇博客旨在实验客户端和服务端相互发送消息的实验,实验成功的现象为,客户端和服务端的两个窗口,即client和server左上角均被打上文字,因为客户端是没有给图片附上文字的功能的,十分感谢柒上夏OPO大佬提供源码上的支持

客户端代码


import numpy as np
import cv2
from socket import socket, AF_INET, SOCK_DGRAM

# 127.0.0.1表示本机的IP,用于测试,使用时需要改为服务端的ip
addr = ('127.0.0.1', 8081)
IP_ADDR = ('127.0.0.1', 8082)
cap = cv2.VideoCapture(0)

# 设置镜头分辨率,默认是640x480
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

s = socket(AF_INET, SOCK_DGRAM)  # 创建UDP套接字
s.bind(IP_ADDR)

while True:
    _, img = cap.read()

    img = cv2.flip(img, 1)

    # 压缩图片
    _, send_data = cv2.imencode('.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 50])

    s.sendto(send_data, addr)
    print(f'正在发送数据,大小:{img.size} Byte')

    # cv2.putText(img, "client", (50, 50),
    #             cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)
    # cv2.imshow('client', img)

    try:
        data, _ = s.recvfrom(921600)
        print('info: ', _)
        receive_data = np.frombuffer(data, dtype='uint8')
        r_img = cv2.imdecode(receive_data, 1)

        cv2.imshow('client', r_img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    except BlockingIOError as e:
        pass

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

s.close()
cv2.destroyAllWindows()

服务端代码

from copy import deepcopy
import numpy as np
import cv2
from socket import socket, AF_INET, SOCK_DGRAM

s = socket(AF_INET, SOCK_DGRAM)  # 创建UDP套接字
addr = ('0.0.0.0', 8081)  # 0.0.0.0表示本机
s.bind(addr)
s.setblocking(0)  # 设置为非阻塞模式

while True:
    data = None
    try:
        data, s_addr = s.recvfrom(921600)
        print('[IP_INFO] {}'.format(s_addr))
        receive_data = np.frombuffer(data, dtype='uint8')
        r_img = cv2.imdecode(receive_data, 1)
        r_img_1 = deepcopy(r_img)
        r_img_2 = deepcopy(r_img)

        cv2.putText(r_img_1, "server", (50, 50),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)
        cv2.imshow('server', r_img_1)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        cv2.putText(r_img_2, "client", (50, 50),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

        _, send_data = cv2.imencode(
            '.jpg', r_img_2, [cv2.IMWRITE_JPEG_QUALITY, 50])

        s.sendto(send_data, s_addr)
        print(f'正在发送数据,大小:{r_img.size} Byte')
    except BlockingIOError as e:
        pass
cv2.destroyAllWindows()

实验历程

假设服务端代码放在server.py的文件中,先打开一个终端

python server.py

假设客户端代码放在client.py的文件中,再打开一个终端,输入

python client.py

实验成功的现象

客户端和服务端的两个窗口,即client和server左上角分别被打上client和server的字样,因为客户端是没有给图片附上文字的功能的

标签:UDP,img,python,cv2,50,client,data,服务端,客户端
From: https://www.cnblogs.com/FallMax/p/17155441.html

相关文章

  • 【Python】【图像处理】图片压缩方法
    一直想找个“无损压缩”的办法。当然这并非真的无损。我采用了Opencv的处理图像相关的方法。请见代码:注意:opencv安装:pipinstallopencv-python别想不开installcv2......
  • Python | import argparse模块的使用
    我们在写python脚本的时候,有时候需要在运行的时候传入参数,而不是写死在程序里,这个时候就要用到argparse模块。argparse模块是Python内置的用于命令项选项与参数解析的......
  • python学习——【第十四弹】
    前言上篇文章​​python学习——【第十三弹​​】中介绍了python中的模块,这篇文章接着学习python中的包。python中的包包是一种用“点式模块名”构造Python模块命名空间的......
  • python绘制基本图
    importpandasaspdimportnumpyasnpcatering_sale='D:\大三下\大数据实验课\data\catering_sale.xls'data=pd.read_excel(catering_sale,names=['data','sale'])......
  • python基础-元组tuple( )
    元组的定义和操作元组的特性:元素数量支持多个元素类型任意下标索引支持重复元素支持可修改性不支持数据有序是使用场景不可修改、可重复的......
  • python基础-列表[ ]
     1列表的定义#定义一个列表listmy_list=["jhk",123,'fasdf']print(my_list)print(type(my_list))#定义一个嵌套的列表my_list=[[1,2,3],[4,5,6],......
  • python 画图 chap3
    importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.figure()p=data.boxplot(return_type='dict'......
  • python基础-基本语句
    1条件语句在进行逻辑判断时,我们需要用到条件语句,Python 提供了 if、elif、else 来进行逻辑判断。格式如下所示: 1if判断条件1:2执行语句1...3elif判断......
  • python基础-入门必备知识
    1标识符标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。以下划线开头的标识符有特殊含义......
  • 轻松保障万级实例,vivo服务端监控体系建设实践
    经过几年的平台建设,vivo监控平台产品矩阵日趋完善,在vivo终端庞大的用户群体下,承载业务运行的服务数量众多,监控服务体系是业务可用性保障的重要一环,监控产品全场景覆盖生......