gpt4 book ai didi

python - 无法连接以在openzmq中的现有tcp连接中打开另一个tcp连接

转载 作者:行者123 更新时间:2023-12-03 12:02:11 32 4
gpt4 key购买 nike

我正在从客户端1和客户端2到服务器连接到客户端2。我正在将帧从客户端1发送到客户端2,然后在客户端2上执行预测并将结果发送到服务器。我有以下代码。
客户端1代码:

  context = zmq.Context()
footage_socket = context.socket(zmq.PUB)
footage_socket.connect('tcp://172.168.1.2:5555')
videoFile = 'data.mp4'
camera = cv2.VideoCapture(videoFile)
length=int(camera.get(cv2.CAP_PROP_FRAME_COUNT))
print(length)
count=0
#time.sleep(2)
while True:
grabbed, frame = camera.read()
count+=1
print(count)
try:
frame = cv2.resize(frame, (224, 224))
except cv2.error:
break
encoded, buffer = cv2.imencode('.jpg', frame)
jpg_as_text = base64.b64encode(buffer)
footage_socket.send(jpg_as_text)
客户端2代码:
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(''))
while True:
frame = footage_socket.recv_string()
img = base64.b64decode(frame)
npimg = np.fromstring(img, dtype=np.uint8)
source = cv2.imdecode( npimg, 1 )
frame=cv2.resize(source,(224,224)).astype("float32")
image = img_to_array( source)
image = image.reshape( (1, image.shape[0], image.shape[1], image.shape[2]) )
image = preprocess_input( image )
preds = model.predict(image)
##connecting to server##
context1=zmq.Context()
footage_socket=context1.socket(zmq.PUB)
footage_socket.connect('tcp://192.168.56.103:9999')
footage_socket.send(preds)
print('sending to server')
服务器代码:
   context = zmq.Context()
footage_socket = context.socket(zmq.SUB)
footage_socket.bind('tcp://0.0.0.0:9999')
footage_socket.setsockopt_string(zmq.SUBSCRIBE, np.unicode(''))
while True:
frame = footage_socket.recv_string()
img = base64.b64decode(frame)
#print(img)
在client-2上,我收到以下错误
    frame = footage_socket.recv_string()
File "/usr/local/lib/python3.5/dist-packages/zmq/sugar/socket.py", line 583, in recv_string
msg = self.recv(flags=flags)
File "zmq/backend/cython/socket.pyx", line 790, in zmq.backend.cython.socket.Socket.recv
File "zmq/backend/cython/socket.pyx", line 826, in zmq.backend.cython.socket.Socket.recv
File "zmq/backend/cython/socket.pyx", line 193, in zmq.backend.cython.socket._recv_copy
File "zmq/backend/cython/socket.pyx", line 188, in zmq.backend.cython.socket._recv_copy
File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc
zmq.error.ZMQError: Operation not supported

最佳答案

几种罪过,让我们一遍又一遍地揭开面纱:
Client-1可以进行改进,但是Client-2存在大多数问题:

################################################################### FOOTAGE ~ <SUB>-Socket
# SUB
footage_socket = context.socket( zmq.SUB )
...
PUB_TARGET = 'tcp://192.168.56.103:9999'
while True:
frame = footage_socket.recv_string() # <SUB>.recv()-ed
source = cv2.imdecode( np.fromstring( base64.b64decode( frame ),
dtype = np.uint8
),
1 )
frame = cv2.resize( source,
(224,224)
).astype( "float32" )
image = img_to_array( source )
image = image.reshape( ( 1,
image.shape[0],
image.shape[1],
image.shape[2]
)
)
preds = model.predict( preprocess_input( image ) )
################################################################## PER-LOOP INFty-times
## connecting to server ###########################
context1=zmq.Context() ## INSTANTIATED new Context()-instance
footage_socket = context1.socket( zmq.PUB ) ## ASSOCIATED a new Socket()-instance
footage_socket.connect( PUB_TARGET ) ## .CONNECT( PUB_TARGET )
footage_socket.send( preds ) ## <PUB>.send()
################################################### LOOP AGAIN
################################################### yet now the <PUB>.recv()
a) while True: -code-block创建尽可能多的 Context() -instances,具有所有分配和至少1-I/O线程,是循环运行的次数
b)循环的尾部为 footage_socket 分配了一个新对象( socket -class的另一个新实例),将原始对象引用呈现给 SUB -type socket-instance一个孤儿,但具有所有关联的资源的分配没有终止
c)新重新分配的 footage_socket -socket,现在带有 PUB -type socket -instance的引用,实际上无法处理 .send() -method,就像在 while True:头中的脚本和-如上所示,将抛出一个(未处理的)异常。

解决方案?
消除这些概念上的错误-避免预期的 SUB和新的 PUB的名称冲突,并避免重复使代码(无穷大)生成新的和新的和新的 Context()实例(这些操作在资源和延迟方面都很昂贵),并且其无限多个 socket(PUB) -instances和无限多个 .connect() -s及其代码应按预期工作。

您想了解更多有关ZeroMQ的帮助吗?
然后随时阅读 this answer

关于python - 无法连接以在openzmq中的现有tcp连接中打开另一个tcp连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64700955/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com