서버 호스트 (S)와 많은 클라이언트 (C1, C2, C3, ...)가 있습니다. 나는 양방향 통신을 위해 S와 C1, C2, C3 사이의 연결을 각각 열고 싶습니다. 이상적으로 소켓을 사용하십시오. 인증 목적으로 SSH를 사용하는 것이 좋습니다. 이상적으로ssh 터널을 통한 소켓을 사용하는 양방향 통신
:
- 클라이언트 C1은 자신의 포트의대로 S에 액세스 할 수 있도록 C1의 포트 포워딩, S에 SSH 역방향 터널을 만듭니다.
- C1에서 실행되는 클라이언트 프로그램은 소켓을 만들고 전달 된 포트에 바인딩합니다.
- S에서 실행되는 서버 프로그램은 소켓을 만들고 전달 된 포트에 바인딩합니다.
- 클라이언트와 서버는 데이터를 교환 할 수 있습니다.
가능한가요? 첫째
, 나는 C1에서 실행 : 내가하지만 아무 소용이 파이썬을 사용하여 초안까지 코딩 시도 ssh -N -R 9999:localhost:15432 [email protected]
을 - 서버에서
둘째 OK I 실행 :
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
셋째, 클라이언트 I에 실행 :
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에서 선호).
미리 감사드립니다.