2013-11-04 11 views
6

IP del mio computer della rete locale è 192.168.0.100, inizio la mia QTcpServer conQTcpServer si può accedere solo tramite localhost

if (!tcpServer->listen(QHostAddress::LocalHost, 1234)) { 

Quando provo a collegarmi ad esso con netcat 192.168.0.100 1234, la connessione viene rifiutata, ma netcat localhost 1234 riesce .

Allo stesso tempo, se ascolto con netcat -l -p 1234, posso connettermi sia su 192.168.0.100 e localhost senza alcun problema.

Questo mi fa grattarmi la testa, perché sta succedendo?

risposta

6

Per accettare connessioni dall'esterno, è necessario ascoltare su 0.0.0.0, non su 127.0.0.1 o localhost. Quest'ultimo consentirà solo le connessioni provenienti dalla stessa macchina. È anche il valore di QHostAddress::LocalHost.

Quindi modificare il primo argomento su QHostAddress::Any e dovrebbe funzionare.

+0

Fino ad ora ho sempre pensato che l'ascolto su localhost ha fatto sì che si ottiene tutte le connessioni che raggiungono la macchina locale, in modo Ho pensato che 'QHostAddress :: LocalHost' è lo stesso di' QHostAddress :: Any'. Grazie per averlo chiarito. – sashoalm

+1

Sì, questa è una causa frequente di confusione. L'ascolto su '127.0.0.1' è destinato ai casi in cui * non * si desidera consentire una connessione dall'esterno, come quando si esegue un server DB sulla stessa macchina del server Web e non si desidera esporre ecc. –

+0

Sembra che vada anche nella direzione opposta. Ho provato con 'tcpServer-> listen (QHostAddress (" 192.168.56.1 "), 1234))' e ora non accetterà 'netcat localhost 1234', solo' netcat 192.168.56.1'. – sashoalm

3

localhost è in un'interfaccia di rete separata

è possibile utilizzare QHostAddress::Any per ascoltare le connessioni esterne

Problemi correlati