python - 使用发送方法pyzmq错误不支持检索操作

标签 python python-3.x sockets pyzmq

我有以下代码将视频帧从服务器发送到客户端。我在 server.py 上检索错误。
服务器.py

import base64
import cv2
import zmq
import time
import numpy as np
context = zmq.Context()
footage_socket = context.socket(zmq.SUB)
footage_socket.bind('tcp://0.0.0.0:5555')
footage_socket.setsockopt_string(zmq.SUBSCRIBE, np.unicode(''))

videoFile = 'SAMPLE.mp4'
camera = cv2.VideoCapture(videoFile)  # init the camera
length=int(camera.get(cv2.CAP_PROP_FRAME_COUNT))
while True:        
    grabbed, frame = camera.read()
    try:
       frame = cv2.resize(frame, (224, 224))
    except cv2.error:
        break
   
    encoded, buffer = cv2.imencode('.jpg', frame)
    jpg_as_text = base64.b64encode(buffer)
    time.sleep(3)
    footage_socket.send(jpg_as_text)
footage_socket.close()
客户端.py
  import cv2,zmq,base64
  import numpy as np
  context = zmq.Context()
  footage_socket = context.socket(zmq.PUB)
  footage_socket.connect('tcp://10.96.0.1:5555')
  while True:
      frame = footage_socket.recv_string()
      source = cv2.imdecode( np.fromstring( base64.b64decode( frame ), dtype = np.uint8),1 )
我正在检索以下错误
  footage_socket.send(jpg_as_text)
  File "/usr/local/lib/python3.5/dist-packages/zmq/sugar/socket.py", line 391, in send
  return super(Socket, self).send(data, flags=flags, copy=copy, track=track)
  File "zmq/backend/cython/socket.pyx", line 727, in zmq.backend.cython.socket.Socket.send
  File "zmq/backend/cython/socket.pyx", line 774, in zmq.backend.cython.socket.Socket.send
  File "zmq/backend/cython/socket.pyx", line 249, in zmq.backend.cython.socket._send_copy
  File "zmq/backend/cython/socket.pyx", line 244, in zmq.backend.cython.socket._send_copy
  File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc
  zmq.error.ZMQError: Operation not supported
非常感谢您的帮助。

最佳答案

您的代码尝试调用 .recv_string() -Socket 上的方法-class 实例,创建类型为 PUB .
那永远行不通。 PUB可扩展的正式沟通原型(prototype)属于一些- PUB lish + many-can- SUB抄写员接收所有 PUB 的那些碎片与其活跃的 SUB 匹配的数据脚本细节。
有详细记录和发布的 ZeroMQ API 规范,对此有明确的说明。 PUB 可以.send()但从不.recv()您的 SUB 也会发生同样的情况-Server.py 中的套接字实例,您的代码(按原样)命令调用 .send() ,对于 SUB 永远不会发生- socket 。
zmq.error.ZMQError: Operation not supported 是此类 API 冲突尝试的唯一结果。

关于python - 使用发送方法pyzmq错误不支持检索操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64739234/

相关文章:

python - 更好的错误报告 mako

python - 同时输出到终端时保持用户输入的完整性

python - 在 Python 2 中检查字符串是否以小数结尾

java - 在java中捕获SocketException时如何重新连接套接字?

c++ - C++ MEX 和 C MEX 之间的区别

sockets - 在 Firefox 附加组件中打开套接字连接

python - 通过强制转换从 Dict 设置类的属性

python - 在函数调用中混合 *vargs 和 **kargs 参数

python - Conemu - 重用实例,但不将其带到前台

python - 屏幕截图python 3.6.6 opencv和枕头不起作用