如何使用 zmq 与远程机器发送消息

问题描述 投票:0回答:1

我计划使用 zmq 在个人笔记本电脑和远程计算机之间进行通信。我计划使用笔记本电脑作为服务器,使用远程计算机作为客户端。目前,我使用 VPN 进入远程计算机的网络并使用 ssh 访问该计算机。

我试图使用 zmq 文档上的一些教程代码来查看发送的消息是否已收到,但这不起作用。

服务器代码:

#
#   Hello World server in Python
#   Binds REP socket to tcp://*:5555
#   Expects b"Hello" from client, replies with b"World"
#

import time
import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:
    #  Wait for next request from client
    message = socket.recv()
    print("Received request: %s" % message)

    #  Do some 'work'
    time.sleep(1)

    #  Send reply back to client
    socket.send(b"World")

客户端代码:

#
#   Hello World client in Python
#   Connects REQ socket to tcp://localhost:5555
#   Sends "Hello" to server, expects "World" back
#

import zmq

context = zmq.Context()

#  Socket to talk to server
print("Connecting to hello world server…")
socket = context.socket(zmq.REQ)
socket.connect("tcp://ip_addr_of_laptop:5555")

#  Do 10 requests, waiting each time for a response
for request in range(10):
    print("Sending request %s …" % request)
    socket.send(b"Hello")

    #  Get the reply.
    message = socket.recv()
    print("Received reply %s [ %s ]" % (request, message))

我尝试研究 ssh 隧道,但对于如何为我的用例设置它感到困惑。

python tcp client-server zeromq
1个回答
0
投票

你所希望的叫做 远程转发。 (VPN 似乎对您没有帮助; 也许它选择防火墙/阻止入站连接请求。)

从笔记本电脑连接到远程计算机。 测试5555端口是否能得到服务—— 我们预计答案是“否”。

lap$  ssh the_remote_machine

rem$  telnet localhost 5555
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host

(您可能会看到提到的 IPv6 地址

::1
;忽略它即可。)

现在重新连接并启用转发。

rem$ exit

lap$ ssh -R 5555:localhost:5555 the_remote_machine

rem$ telnet localhost 5555
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

太棒了! 现在你的Python客户端代码可以连接到

tcp://localhost:5555
, 远程的 sshd 会将数据发送回笔记本电脑的 ssh, 它将代表您连接到笔记本电脑 zmq 服务器。


想象一个不相关的 zmq 守护进程已经在远程服务器上运行, 所以你需要选择一个不同的端口。 你可以这样做。

lap$ ssh -R 5556:localhost:5555 the_remote_machine

rem$ telnet localhost 5556
Trying 127.0.0.1...
Connected to localhost.

笔记本电脑上的 zmq 服务器对这些恶作剧一无所知, 并愉快地坚持使用通常的端口 5555。

© www.soinside.com 2019 - 2024. All rights reserved.