Thread obsoleto [Server] Indirizzo IP e Porta

gedamial

Utente Senior
Autore del topic
9 Giugno 2010
1.937
69
Miglior risposta
0
Salve.

Avevo questo dubbio riguardo i server e come essere raggiunti. Sappiamo che ogni server è distinguibile da un altro mediante indirizzo IP e la porta sulla quale opera.
Ora, se io dovessi specificare i "dati" di un server in questo modo (esempio fatto in C):

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!

Stabilisco che la porta è 100. E l'indirizzo IP? Qual è l'indirizzo IP di questo server? Molte volte viene specificato apertamente in questo modo:

server.sin_addr.s_addr = inet_addr("123.123.123.123");

In questo caso l'IP è 123.123.123.123... ma nel caso precedente qual è l'indirizzo IP di quel server?
Inoltre, se proviamo ad usare il Prompt dei Comandi scrivendo:

telnet
open localhost 100

(dove 100 è la porta del server) perché inseriamo localhost?

Non capisco :emoji_confused:

[taggo un attimino @nothing e @TBH perché credo ne sappiano qualcosa in più]

Grazie in anticipo!
 
La tua macchina è 127.0.0.1. "localhost" è semplicemente un alias per 127.0.0.1.

Comunque, sai cosa farci con quella struttura lì?
 
Inserisci localhost, che equivale ad INADDR_LOOPBACK perché vuol dire che il server gira sullo stesso computer in cui gira il client quindi si dice che il tipo di connessione è una connessione locale - localhost = host locale -. Leggi qui :
Perfavore, Entra oppure Registrati per vedere i Link!


Per quanto riguarda INADDR_ANY leggi qui :
Perfavore, Entra oppure Registrati per vedere i Link!
 
server.sin_addr.s_addr = INADDR_ANY;

Per rispondere solo alla tua domanda, l'IP l'hai indicato con INADDR_ANY che vuol dire che il tuo server ascolterà sull'indirizzo 0.0.0.0 ovvero su qualsiasi indirizzo di qualsiasi interfaccia presente nel sistema (perché un sistema può avere molte interfacce e molti IP).

Per vedere su quali porte il tuo sistema è in ascolto su ogni IP, in Windows puoi dare il comando seguente in una console

netstat -an | find /i "LISTEN" | find "0.0.0.0"
 
Aspettate, avete frainteso.

So cosa è il localhost :emoji_relieved: quello che non ho capito è: una volta aver scritto

server.sin_addr.s_addr = INADDR_ANY;

che effettivo indirizzo sto dando al server? @System32 Nel sito che mi hai linkato (che avevo già letto) dice:

This allowed your program to work without knowing the IP address of the machine it was running on, or, in the case of a machine with multiple network interfaces, it allowed your server to receive packets destined to any of the interfaces.

Permette al mio programma di ricevere pacchetti destinati a ciascuna interfaccia.

Quando SPECIFICAVO l'IP, sul telnet il comando era:

open 111.222.333.444 100

Quando invece uso INADDR_ANY, non scrivo più l'IP ma la clausola localhost

Su internet ho letto che INADDR_ANY addirittura genera un IP random e lo associa al server.

Capita la mia domanda/dubbio?

---EDIT---

@nothing quindi se volessi far accedere al mio server un mio amico che si trova da un'altra parte del mondo, cosa mi converrebbe fare?
 
Ultima modifica:
Questo è un altro problema. Bisogna considerare la configurazione di rete con cui operi. Come è collegato il PC ad Internet? Usi un router? Un IP pubblico statico? Quale operatore?
 
Questo è un altro problema. Bisogna considerare la configurazione di rete con cui operi.
Bisogna considerare la configurazione di rete con cui opera la persona che tiene attivo il server sul proprio PC?

Come è collegato il PC ad Internet? Usi un router? Un IP pubblico statico? Quale operatore?
Non dirmi che devo sbloccare le porte TCP :facepalm:
 
Direi di sì ... se le porte sono bloccate non si connette nessuno dall'esterno.

1) Il tuo programma deve ascoltare sull'IP locale (se è un IP privato potrebbe essere qualcosa come 192.168.....)

2) Nel router devi attivare il NAT dell'IP pubblico sull'IP privato della tua macchina, con la porta che userai (esattamente come dipende dal modello/tipo di router ed operatore)

3) Il tuo amico deve connettersi sul tuo IP pubblico/porta prescelta.
 
Direi di sì ... se le porte sono bloccate non si connette nessuno dall'esterno.

1) Il tuo programma deve ascoltare sull'IP locale (se è un IP privato potrebbe essere qualcosa come 192.168.....)

2) Nel router devi attivare il NAT dell'IP pubblico sull'IP privato della tua macchina, con la porta che userai (esattamente come dipende dal modello/tipo di router ed operatore)

3) Il tuo amico deve connettersi sul tuo IP pubblico/porta prescelta.

Scusa ma sistemi più complessi come (ahimè, sempre il solito esempio faccio) Skype.

Skype, sempre secondo te eh perchè non puoi saperlo, come funziona per quanto riguarda server/comunicazione?
Ha un solo server sul quale tutti noi utenti (client) ci connettiamo e chattiamo con altre persone?
 
Così però stai spaziando da una argomento ad un altro e non bastano mille forum ...

Hai iniziato un discorso sull'IP del socket, passi al collegamento di un amico al tuo server e finisci con il collegamento di tutto il mondo a skype ...

Skype, come altri servizi dedicati a milioni di persone usufruiscono di particolari tecnologie (distribuzione del carico su cluster di server) e altro di cui è poco utile discutere qui.
 
Hai iniziato un discorso sull'IP del socket, passi al collegamento di un amico al tuo server e finisci con il collegamento di tutto il mondo a skype ...

:ahah: hai ragione scusa, allora faccio la domanda diretta:

in quale caso si usa INADDR_ANY e in quale si esplicita l'indirizzo IP?
 
Se hai un solo IP configurato in una sola scheda è ovvio che il problema non sussiste.

Ma puoi avere più interfacce con diversi IP dedicati al traffico tra sistemi diversi.

E' possibile che su alcune interfacce tu non debba far collegare nessuno e quindi devi indicare uno specifico IP su cui ti è permesso far collegare dei client, non tutti.
 
Ultima modifica:
Se hai un solo IP configurato in una sola scheda è ovvio che il problema non sussiste.

Ma puoi avere più interfacce con diversi IP dedicati al traffico tra sistemi diversi.

E' possibile che su alcune interfacce tu non debba far collegare nessuno e quindi devi indicare uno specifico IP su cui ti è permesso far collegare dei client, non tutti.

Quindi, nel caso volessi creare un server e metterlo in ascolto su un IP scelto DA ME potrei farlo? Come si fa con la porta. La porta la scelgo io. Posso fare lo stesso con l'IP? Magari verificando che sia inutilizzato da altre persone