2013-01-24 14 views
5

Potete dirmi come è possibile utilizzare per inviare messaggi ZeroMQ tra due programmi situati su server diversi utilizzando un socket comune? Con tutti i programmi di prese locali funziona, ma non capisco come si sono diffusi in luoghi diversi. Perché salite errore:ZeroMQ, come connettersi alla presa tcp esterna?

Traceback (most recent call last): 
    File "/Users/*****/Projects/*****/workers/internal_links_parser.py", line 20, in <module> 
    socket.bind("tcp://***.***.***.***:5000") 
    File "socket.pyx", line 447, in zmq.core.socket.Socket.bind (zmq/core/socket.c:4312) 
zmq.core.error.ZMQError: Can't assign requested address 

Spiegare, per favore, e se non è difficile dare un esempio. Grazie!

+0

hai salvato il mio tempo per chiedere ancora una volta a questa domanda! Grazie –

risposta

8

dallo zmq socket manual su Socket.bind;

This causes the socket to listen on a network port. Sockets on the other side of this connection will use Socket.connect(addr) to connect to this socket.

In altre parole, ciò indica a 0mq di ascoltare una porta locale per le connessioni in entrata; si dovrebbe usare qualcosa di simile socket.bind("tcp://0.0.0.0:5000") ad ascoltare tutti gli indirizzi IP della macchina sulla porta 5000.

L'altro lato della connessione dovrebbe usare Socket.connect con un qualcosa di URL tipo socket.connect("tcp://remoteip:5000") per connettersi all'altro lato di ascolto.

Sembrerebbe dal messaggio di errore che si sta cercando di bind per l'indirizzo remoto anziché il collegamento al locale e la connessione al remoto.

2

Non dimenticare di controllare il firewall. Dovrebbe essere inattivo.

Inoltre, è possibile controllare per sapere se il server è accessibile o meno con telnet:

telnet serverIPaddress serverPortNo