python - ZeroMQ 操作抛出 EXC : [ Operation cannot be accomplished in current state ]

标签 python sockets message-queue zeromq

我正在尝试制作一个能够发送数据然后接收数据的类。

现在,它只对第一次发送/接收有效,如果再次尝试 .send(),它会在下面抛出一个错误。

>Traceback (most recent call last):
  File "main.py", line 31, in <module>
    zq.send(arr)
  File "D:\ITIM\video2\MQCompare\cZMQ.py", line 17, in send
    self.socketC.send(data)
  File "zmq/backend/cython/socket.pyx", line 636, in zmq.backend.cython.socket.S
ocket.send (zmq\backend\cython\socket.c:7305)
  File "zmq/backend/cython/socket.pyx", line 683, in zmq.backend.cython.socket.S
ocket.send (zmq\backend\cython\socket.c:7048)
  File "zmq/backend/cython/socket.pyx", line 206, in zmq.backend.cython.socket._
send_copy (zmq\backend\cython\socket.c:3032)
  File "zmq/backend/cython/socket.pyx", line 201, in zmq.backend.cython.socket._
send_copy (zmq\backend\cython\socket.c:2920)
  File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc.
_check_rc (zmq\backend\cython\socket.c:10014)
    raise ZMQError(errno)
zmq.error.ZMQError: Operation cannot be accomplished in current state`

我使用的代码如下所示:

import zmq

class ZeroMQ:

def __init__(self):
    self.context = zmq.Context()
    self.socketS = self.context.socket(zmq.REP)
    self.socketS.bind("tcp://*:5555")
    self.socketC = self.context.socket(zmq.REQ)
    self.socketC.connect("tcp://localhost:5555")

def __exit__(self, exc_type, exc_value, traceback):
    self.socketC.close()
    self.socketS.close()

def send(self, data):
    self.socketC.send(data)

def recv(self):    
    self.socketS.recv()

我的连接正确吗?

为什么函数 send 会抛出错误?

我将不胜感激任何帮助。谢谢。

最佳答案

仅仅是因为 socketC ,是 REQ 的实例 原型(prototype),在没有事先调用 .send() 的情况下,永远不能发送另一条消息(正如上面 socketC.recv() 类方法的实现中编码的那样) 实例方法。

两者 REQ REP 原型(prototype)有据可查,必须服从 .send()-.recv()-.send()-.recv()-... 的两步舞。分别.recv()-.send()-.recv()-...使用他们的本地实例方法。

ZeroMQ 是这样的 REQ / REP套接字已设计并记录在案。

关于python - ZeroMQ 操作抛出 EXC : [ Operation cannot be accomplished in current state ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49056602/

相关文章:

python - Keras 中具有自定义损失的无监督编码

python - 如何使用列表理解在 Python 中实现内置集

java - Android 蓝牙广播接收器未接收

RabbitMQ 不均匀地向消费者分发消息

python - heroku:无法检测到此应用程序的默认语言

python - Gtk3 Python - 永久可见的 SearchBar

C++ UDP RecvFrom、SendTo 不同套接字

ruby-on-rails - 如何使用 RestClient 修复 Ruby 中的套接字错误?

queue - RabbitMQ - 消息传递顺序

python - pika, rabbitmq - 从队列中获取所有消息而不使用它们