我有一个服务器主机(S)和一堆客户端(C1,C2,C3,...)。我想分别打开S和C1,C2,C3之间的连接以进行双向通信。理想情况下使用套接字。用于授权目的的SSH是首选。
理想情况下:
这样的事情可能吗?我尝试使用Python编写草稿但无济于事:
首先,我在C1上运行:ssh -N -R 9999:localhost:15432 root@example.com
- 确定
其次,在服务器上我运行:
import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 9999))
serversocket.listen(5)
while True:
connection, address = serversocket.accept()
buf = connection.recv(64)
if len(buf) > 0:
print buf
break
第三,在客户端我运行:
import socket
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('localhost', 15432))
clientsocket.send('hello')
但我在客户端获得socket.error: [Errno 111] Connection refused
。此外,如果我首先设置隧道然后启动服务器程序,我将获得[Errno 98] Address already in use
。它只在我第一次启动程序,然后设置隧道时才有效。
如果前面提到的概念没有意义,那么您建议创建一种同步工具,以便任何客户端从服务器侦听查询并可以响应数据? (最好是Python)。
提前致谢。
答案 0 :(得分:0)
Model::where('published', 1)->with('relationship')
没有做你认为它做的事情:它旨在让ssh-destination能够连接回发起者。但这会使原始方面成为服务器。
听起来你应该使用-N
来简单地创建从客户端通过ssh隧道到服务器的连接。
要演示:我有一个名为“bree”的本地服务器。在那台机器上,我执行(这也可能是你的python服务器侦听端口9999):
-L
现在在我的客户端计算机上,我在一个窗口中执行此操作(或者可以将其放在后台):
nc -l 9999
这说:在本地(客户端)机器上侦听到端口9999,当与它建立连接时,通过隧道转发请求,并连接到bree上的端口9999。
现在,在客户端计算机的第二个窗口中,我执行:
ssh -N -L 9999:bree:9999 bree
两个nc localhost 9999
实例已连接。