PDA

Visualizza la versione completa : [c++] perché specificare l'ip durante la creazione del server??


g.b99pm10
23-02-2014, 13:25
Salve, come da titolo volevo chiedere come mai quando si crea un socket per il server(intendo il tipo di socket sock_stream) bisogna anche specificare l'ip. Mentre per il client ha un senso, perchè deve connettersi ad un specificato ip, non capisco la sua utilità nel server, che non deve connettersi da nessuna parte...

quindi ho pensato che è possibile specificare un ip del server che sia diverso da quello sulla macchina.

Faccio un esempio:

io ed un mio amico abbiamo rispettivamente un client ed un server.
l'ip del mio amico è per esempio(invento) 125.4.6.2
quindi se voglio connettere il mio client al suo server dovrò settare l'indirizzo ip "del client" a 125.4.6.2

Ora mi chiedo: è possibile dare al server un ip proprio che non dipenda dalla macchina su cui lavora?

Per esempio il server si trova su una connessione 125.4.6.2, ma io gli do l'ip di 126.3.7.1, per far collegare il mio client al suo server, devo settare l'ip a 125.4.6.2 o a 126.3.7.1??

Grazie per l'attenzione.

Ciao :)

Shores
23-02-2014, 13:40
A mio avviso ti stai complicando la vita solo perchè non hai considerato un fatto importante: una singola macchina server non è affatto detto che abbia un unico indirizzo ip!

In effetti, non è nemmeno necessario che un pc server possieda più schede di rete: è semplicissimo assegnare ad una stessa scheda di rete più indirizzi ip; anche se, nel tuo esempio, sembri voler dire che ad un servizio o demon che dir si voglia possa venire assegnato un ip, mentre gli ip possono essere assegnati SOLO al sistema operativo in se, non ad uno specifico servizio.

Questo significa che, quindi, sarà necessario per aprire un socket in ascolto, specificare su quale tra gli indirizzi ip assegnati alla macchina si vuole restare in ascolto.

Tralaltro, questo ha anche l'effetto collaterale che sia possibile effettuare connessioni ip anche dalla macchina a se stessa: se il socket in ascolto viene aperto su 127.0.0.1 e su questo socket si accettano connessioni solo da 127.0.0.1, sarà possibile effettuare il testing del modulo server e del modulo client di una applicazione stando sulla stessa macchina, e nel contempo evitando che chiunque possa collegarsi al modulo server che è ancora in sviluppo.

Ciao!

P.s.: Attenzione anche a non confondere ip del client con ip del server con ip a cui il client si connette: se il server ha indirizzo 111.111.111.111 e il client 222.222.222.222, quando sul client vuoi conntetterti al server dovrai richiedere una connessione verso l'ip 111.111.111.111 ....

g.b99pm10
23-02-2014, 14:03
grazie mille per la risposta completa e per la sorprendente velocità :eek:.
Quindi, se ho capito bene, posso dire al server di stare in attesa su una determinata porta e ad un determinato ip ,che posso anche inventare io, indipendente all'ip della macchina?

Ho capito bene?

grazie :)

oregon
23-02-2014, 14:55
No, non puoi inventare nulla.

L'IP deve essere assegnato ad una interfaccia (dall'amministratore del sistema).

Inoltre l'IP deve essere impostato su una sottorete raggiungibile dal tuo client (non sempre è così, per vari motivi, ma entreremmo in dettagli che per ora non servono).

E' corretto che devi fare impostare IP:porta su cui il server deve ascoltare. Saranno l'IP:porta che il tuo client dovrà contattare.
E' molto semplice.

g.b99pm10
23-02-2014, 18:09
grazie.
Quindi da quanto ho capito devo necessariamente indicare al client un ip diverso ogni volta che il mio amico cambia ip...

non c'è qualche modo per ovviare al problema?

p.s in una connessione peer to peer serve un server?

oregon
23-02-2014, 18:44
Quindi da quanto ho capito devo necessariamente indicare al client un ip diverso ogni volta che il mio amico cambia ip...

Se cambi IP sì. Se un tuo amico si trasferisce di casa, non devi scrivere il nuovo indirizzo nella busta di una tua lettera?


non c'è qualche modo per ovviare al problema?

Puoi farti dare l'IP attuale da un altro server, dal DNS, se l'indirizzo è registrato. Per questo si può usare un servizio di DNS dinamico ...


p.s in una connessione peer to peer serve un server?

No, ma ogni client è collegato all'altro e quindi svolge la "funzione" di server. Dal punto di vista della comunicazione non cambia molto.

g.b99pm10
23-02-2014, 20:01
ed infine, dopo ho finito di rompere le scatole xD

il mio amico non si fida ad aprire la porta necessaria per la comunicazione ed io ho perso la password del mio router...

visto che il server per funzionare ha bisogno che le porte siano aperte, se facessi un sistema peer 2 peer, non servirebbe avere le porte aperte?

oregon
23-02-2014, 21:28
Sì che serve. Tu devi contattare il tuo client più vicino (in quel caso lui è un server) e un altro deve contattare te (sei tu il server).

P.S. Anche se hai perso la password esiste sempre un reset per la password standard nel router.
P.P.S. Quante difficoltà hai ... prova con un altro amico che apra la porta ...

g.b99pm10
24-02-2014, 14:10
grazie per l'aiuto,
per quanto riguarda la password, ne avevo messa una per la gestione del modem, e ora non posso resettarlo perché il mio pc non ha l'entrata del cavo del modem, ho provato anche upnp, ma il mio modem non lo supporta.... mi toccherà riprovare più volte manualmente fino alla follia :dhò:.

Grazie per il serio aiuto che date agli utenti,

ciao :)

Storti
24-02-2014, 14:59
per quanto riguarda la password, ne avevo messa una per la gestione del modem, e ora non posso resettarlo perché il mio pc non ha l'entrata del cavo del modem, ho provato anche upnp, ma il mio modem non lo supporta....

Avrà pure un tasto di reset quel router, no?

Loading