2012-10-20 24 views
23

Ho un problema con questi codici client e server, continuo a ricevere [Errno 10061] Impossibile stabilire una connessione perché il La macchina target lo ha attivamente rifiutatoErrno 10061: impossibile stabilire una connessione perché il computer di destinazione lo ha rifiutato attivamente (client - server)

Sto eseguendo il server su una macchina virtuale con Windows XP SP3 e il client su Windows 7 a 64 bit, la mia versione di Python è la 2.7.3. Quello che voglio sapere è come dovrei modificare il codice per usare il client e il server su reti diverse! Grazie!

server:

#!/usr/bin/python   # This is server.py file 

import socket    # Import socket module 
s = socket.socket()   # Create a socket object 
host = '0.0.0.0' # Get local machine name 
port = 12345    # Reserve a port for your service. 


print 'Server started!' 
print 'Waiting for clients...' 

s.bind((host, port))  # Bind to the port 
s.listen(5)     # Now wait for client connection. 
c, addr = s.accept()  # Establish connection with client. 
print 'Got connection from', addr 
while True: 
    msg = c.recv(1024) 
    print addr, ' >> ', msg 
    msg = raw_input('SERVER >> ') 
    c.send(msg); 
    #c.close()    # Close the connection 

cliente:

#!/usr/bin/python   # This is client.py file 

import socket    # Import socket module 

s = socket.socket()   # Create a socket object 
host = socket.gethostname() # Get local machine name 
port = 12345    # Reserve a port for your service. 

print 'Connecting to ', host, port 
s.connect((host, port)) 

while True: 
    msg = raw_input('CLIENT >> ') 
    s.send(msg) 
    msg = s.recv(1024) 
    print 'SERVER >> ', msg 
#s.close      # Close the socket when done 

PS: il codice è da internet.

+2

_attivamente rifiutato_ implica che il firewall della macchina server ha bloccato la connessione, probabilmente non correlato al codice. –

+0

Il firewall è disattivato:/continua a ricevere l'errore – havox

+2

In che modo il guest VM è connesso alla rete? Via NAT + Porta avanti o in modalità bridge? –

risposta

19

10061 è WSAECONNREFUSED, 'connessione rifiutata', il che significa che non c'era niente in ascolto sull'IP: porta a cui si è tentato di connettersi.

C'era un prodotto firewall intorno all'anno 2000 che emetteva i rifiuti invece di ignorare le connessioni in entrata alle porte bloccate, ma questo fu presto riconosciuto come una perdita di informazioni agli attaccanti e corretto o ritirato.

2

Utilizzo degli esempi da: https://docs.python.org/3.2/library/socketserver.html Ho determinato che era necessario impostare la porta HOST sulla macchina su cui era in esecuzione il programma server. Quindi TCPServer su 192.168.0.1 HOST = TCPServer IP 192.168.0.1 quindi ho dovuto impostare il lato TCPClient per puntare all'IP TCPServer. Quindi il valore HOST di TCPClient = 192.168.0.1 - Scusa, questo è il meglio che posso descriverlo.

+1

In altre parole, l'indirizzo IP di destinazione era sbagliato. – EJP

3

Suggerimento: actively refused suona come problemi un po 'più in profondità tecnica, ma ...

... in realtà, questa risposta (e anche specificamente errno:10061) è anche dato, se si chiama il bin/mongo eseguibile and the mongodb service is simply not running sulla macchina bersaglio. Questo vale anche per le istanze della macchina locale (tutto accade su localhost).

Sempre escludere per questa banale possibilità il primo, cioè semplicemente utilizzando il client della riga di comando per accedere al proprio db.

See here.

-1

La soluzione è quella di utilizzare lo stesso indirizzo IP e numero di porta in entrambi i client e server. Prova, nel client per l'utilizzo TCP_IP = 'scrivere il numero ip qui' TCP_PORT = scritto il numero della porta qui s.connect ((TCP_IP, TCP_PORT))

+0

Solitamente la soluzione utilizza 0.0.0.0 nel server. – EJP

0

se si dispone di server remoto installato su di voi macchina. fornire host server.py come "localhost" e il numero di porta. quindi lato client, è necessario fornire l'indirizzo IP-127.0.0.1 e il numero di porta locale. quindi i suoi lavori

+0

La domanda riguarda "reti diverse" e questa risposta non funzionerà nemmeno su host diversi nella stessa rete, per non parlare di reti diverse. – EJP

-1

la soluzione a breve termine è utilizzare l'host iis predefinito e la porta normalmente 120.0.0.1 e 80 rispettivamente. Tuttavia sto ancora cercando una soluzione più versatile.

+0

Dato che OP è in esecuzione su due macchine e questa è una soluzione localhost, è improbabile che funzioni? – roelofs

+0

E dato che localhost è 127.0.0.1, non 120.0.0.1, non funzionerà nemmeno in un host. – EJP

Problemi correlati