私はサーバホスト(S)とクライアント(C1、C2、C3、...)の束を持っています。私は、双方向通信のために、SとC1、C2、C3との間の接続をそれぞれ開きたいと思う。理想的にはソケットを使用する。認可の目的でSSHを使用することをお勧めします。理想的sshトンネル経由のソケットを使用した双方向通信
:
- クライアントC1は、それ自身のポートのように、それはSでアクセス可能であるように、C1のポートを転送し、SにSSH逆方向トンネルを作成します。
- C1で実行されているクライアントプログラムはソケットを作成し、転送されたポートにバインドします。
- Sで実行されているサーバープログラムはソケットを作成し、転送されたポートにバインドします。
- クライアントとサーバーはデータを交換できます。
可能なことはありますか?私は、Pythonを使ってドラフトをアップコーディング試みたが、無駄に:まず
、私はC1上で実行します。ssh -N -R 9999:localhost:15432 [email protected]
- OK
を第二に、私は実行して、サーバー上:
第三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で)。
ありがとうございます。