Pagina 1 di 1

problema client server

Inviato: venerdì 26 dicembre 2014, 12:29
da luaneddra89
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

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,

Re: problema client server

Inviato: venerdì 26 dicembre 2014, 12:34
da jepessen
L'errore mi sembra abbastanza chiaro... stai passando una struttura sockaddr_in invece che sockaddr...

Re: problema client server

Inviato: venerdì 26 dicembre 2014, 12:44
da luaneddra89
quindi che dovrei fare... perchè ho troppi dubbi su questo argomento