Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - socket client
Forum - C/C++ - socket client

Avatar
Selyn (Normal User)
Newbie


Messaggi: 2
Iscritto: 01/07/2013

Segnala al moderatore
Postato alle 15:24
Lunedì, 01/07/2013
ciao a tutti sto imparando ora a programmare con i socket in ambito unix e volevo chiedere una cosa.

nella creazione del lato client io uso

servaddr.sin_port= htons(1024);

che mi serve per connettermi al server il quale è in ascolto sulla porta 1024.
Nella schermata del server quando viene accettata una connessione mi faccio stampare l host e la porta del client.

printf("Accettata connessione dall'host = %s, porta = %d\n\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));

Ora la porta non dovrebbe essere 1024? perchè mi esce ad esempio 49200 ,49201 e così via.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 15:41
Lunedì, 01/07/2013
htons("1024"); probabilmente.....

P.S. no ok non lo so

Ultima modifica effettuata da il 01/07/2013 alle 15:42
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6109
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 15:59
Lunedì, 01/07/2013
Quando apri una connessione, il server ascolta su una determinata porta, mentre il client si connette tramite un'altra (che puoi specificare in maniera esplicita, oppure il sistema operativo ne decidera' una a caso). Se ci pensi non ha senso chiamare client.sin_port, siccome hai gia' stabilito la connessione e' ovvio che il client si e' connesso alla porta 1024. Puoi semplicemente usare il valore di serveraddr.sin_port per il tuo output.


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
Selyn (Normal User)
Newbie


Messaggi: 2
Iscritto: 01/07/2013

Segnala al moderatore
Postato alle 17:07
Lunedì, 01/07/2013
Testo quotato

Postato originariamente da pierotofy:

Quando apri una connessione, il server ascolta su una determinata porta, mentre il client si connette tramite un'altra (che puoi specificare in maniera esplicita, oppure il sistema operativo ne decidera' una a caso). Se ci pensi non ha senso chiamare client.sin_port, siccome hai gia' stabilito la connessione e' ovvio che il client si e' connesso alla porta 1024. Puoi semplicemente usare il valore di serveraddr.sin_port per il tuo output.



Come posso specificare in maniera esplicita la porta del client? se la dichiaro così poi qualsiasi client si connette in locale naturalmente ha la stessa porta?

invece se voglio lasciare così in modo che il sistema operativo scelga lui una porta chiamo servaddr.sin_port invece di client.sin_port? e poi se io chiamo client.sin_port non m dovrebbe stampare 1024? :-?

ok sono un po confusa. Se uso servaddr.sin_port mi stampa 1024, se uso client.sin_port mi stampa un altro numero tipo 49304. Questo numero sarebbe la porta che il sistema operativo ha dato al client?


Ultima modifica effettuata da Selyn il 01/07/2013 alle 17:12
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6109
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 18:03
Lunedì, 01/07/2013
C'e' confusione...

Il programma server ascolta su una determinata porta (1024).

Quando il programma client si connette al server, il sistema operativo assegna al client una porta a caso (non in uso) per stabilire la connessione. Puoi vedere questo meccanismo digitando netstat -b da una console.

Se decidi di specificare una porta (tramite bind) per il client, dovrai assicurarti che sia unica e non usata. A meno che non hai problemi con il firewall non vedo un motivo per farlo.

Testo quotato


se uso client.sin_port mi stampa un altro numero tipo 49304. Questo numero sarebbe la porta che il sistema operativo ha dato al client?



Si.

Ultima modifica effettuata da pierotofy il 01/07/2013 alle 18:03


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote