problema client server
Inviato: venerdì 26 dicembre 2014, 12:29
salve a tutti... stavo iniziando a studiare l ambiente client server in c.
Per quanto riguarda il codice del server tutto ok... ma quando lancio il client mi da un errore sulla getsockname()
Potreste dirmi dove sbaglio?
Vi ringrazio e vi posto il codice
// CLIENT
questo è l'errore che si presenta nel terminale
Per quanto riguarda il codice del server tutto ok... ma quando lancio il client mi da un errore sulla getsockname()
Potreste dirmi dove sbaglio?
Vi ringrazio e vi posto il codice
// CLIENT
Codice: Seleziona tutto
#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
int 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
questo è l'errore che si presenta nel terminale
Codice: Seleziona tutto
in function ‘main’:
client.c:59:2: warning: passing argument 2 of ‘getsockname’ from incompatible pointer type [enabled by default]
getsockname(sd,&mio_addr, &mio_addr_len);
^
In file included from client.c:3:0:
/usr/include/i386-linux-gnu/sys/socket.h:127:12: note: expected ‘struct sockaddr * __restrict__’ but argument is of type ‘struct sockaddr_in *’
extern int getsockname (int __fd, __SOCKADDR_ARG __addr,