problema client server

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
luaneddra89
Prode Principiante
Messaggi: 36
Iscrizione: venerdì 26 dicembre 2014, 12:25

problema client server

Messaggio 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,
Avatar utente
jepessen
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3569
Iscrizione: lunedì 26 dicembre 2005, 11:49
Desktop: KDevelop
Distribuzione: Ubuntu 20.04
Sesso: Maschile
Località: Somma Lombardo

Re: problema client server

Messaggio da jepessen »

L'errore mi sembra abbastanza chiaro... stai passando una struttura sockaddr_in invece che sockaddr...
Compiz l'ha creato Chuck Norris quando ha colpito un computer con un calcio rotante.
http://www.renderosity.com/mod/gallery/ ... e=Jepessen
http://jepessen.wordpress.com/
luaneddra89
Prode Principiante
Messaggi: 36
Iscrizione: venerdì 26 dicembre 2014, 12:25

Re: problema client server

Messaggio da luaneddra89 »

quindi che dovrei fare... perchè ho troppi dubbi su questo argomento
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti