Oppure

Loading
01/07/13 13:24
Selyn
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.
aaa
01/07/13 13:41
htons("1024";); probabilmente.....

P.S. no ok non lo so
Ultima modifica effettuata da 01/07/13 13:42
01/07/13 13:59
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.
Il mio blog: piero.dev
01/07/13 15:07
Selyn
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 01/07/13 15:12
aaa
01/07/13 16:03
pierotofy
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.

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 01/07/13 16:03
Il mio blog: piero.dev