PDA

Visualizza la versione completa : problema client server in c


luaneddra89
26-12-2014, 15:33
salve a tutti ho un problema su questo codice eseguito dal client....
nel terminale mi da un errore sulla getsockname.
potreste aiutarmi?

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>

//NUMERO DI PORT SUL QUALE IL CLIENT CHIEDE LA CONNESSIONE

#define PORT 4000

//FUNZIONE PER INIZIALIZZARE GLI INDIRIZZI

void addr_initialize(struct sockaddr_in *indirizzo, int port, long IPaddr)
{
indirizzo->sin_family = AF_INET;
// htons: host to network conversion, short//
indirizzo->sin_port = htons((u_short)port);
indirizzo->sin_addr.s_addr = IPaddr;
}


// PROGRAMMA PRINCIPALE

void main(int argc,char*argv[])
{

//Descrittore del socket
int sd;

//indirizzo del client
struct sockaddr_in mio_addr;

//indirizzo del server
struct sockaddr_in server_addr;

//Dimensione dell'indirizzo client
int mio_addr_len = sizeof(mio_addr);

//Controllo per la connessione
int error;

//inizializza indirizzo server
addr_initialize(&server_addr , PORT, inet_addr(argv[1]));

//Crea l identificatore del socket
sd = socket(AF_INET,SOCK_STREAM,0);


// crea una connessione sul socket appena creato
error = connect(sd,(struct sockaddr*)&server_addr, sizeof(server_addr));

// controllo se la connect() e andata a buon fine

if(error==0)
{
// se la connessione ha avuto successo stampa su schermo connessione eseguita
printf("\nHo eseguito la connessione con successo\n");
// scrive nell'indirizzo in mio_addr l'indirizzo del client tramite getsockname
getsockname(sd,&mio_addr, &mio_addr_len);
// stampa a video il port del client dopo averlo convertito dal formato rete al
// formato host tramite ntohs()
printf("\nPorta numero: %d\n",ntohs(mio_addr.sin_port));
//chiude il socket
close(sd);
}
else {
printf("%s","\nErrore di connessione\n\n");
// se la connessione non andata a buon fine chiudo il socket
close(sd);
}

}//main

oregon
26-12-2014, 16:50
Devi dire di quale errore si tratta

Loading