Il codice che uso e' un semlice programmino client - servert...
Il problema credo sia nel client, infatti se provo a stampare il contenuto di mio_addr.in_addr mi restituisce dei valori assurdi
Li riporto qui di seguito:
CLIENT
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
/* Numero di Port sul quale il client richiede 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;
indirizzo->sin_port = htons((u_short) port);
indirizzo->sin_addr.s_addr = IPaddr;
}
/* Programma principale */
void main(int argc, char* argv[])
{
int sd;
struct sockaddr_in server_addr;
struct sockaddr_in mio_addr;
int mio_addr_len=sizeof(mio_addr);
int error;
addr_initialize(&server_addr, PORT, inet_addr(argv[1]));
sd=socket(AF_INET,SOCK_STREAM,0);
error=connect(sd,(struct sockaddr*) &server_addr, sizeof(server_addr));
if (error==0)
{
printf("Ho eseguito la connessione\n");
getsockname(sd, &mio_addr, &mio_addr_len);
printf("il mio port e': %d\n\n",ntohs(mio_addr.sin_port));
printf("il mio IP è: %s", inet_ntop(AF_INET,mio_addr.sin_addr.s_addr,IP,INET _ADDRSTRLEN));
close(sd);
}
else printf("%s","\nErrore di connect\n\n");
close(sd);
}
SERVER
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 4000 >
#define MAXCONN 5
void addr_initialize(struct sockaddr_in *indirizzo, int port, long IPaddr)
{
indirizzo->sin_family = AF_INET;
indirizzo->sin_port = htons((u_short) port);
indirizzo->sin_addr.s_addr = IPaddr;
}
void main(int argc, char * argv[])
{
int sd,new_sd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int client_len=sizeof(client_addr);
addr_initialize(&server_addr, PORT, INADDR_ANY);
sd=socket(AF_INET,SOCK_STREAM,0);
bind(sd,(struct sockaddr*) &server_addr,sizeof(server_addr));
listen(sd,MAXCONN);
printf("Mi pongo in attesa di richieste di connessione\n");
printf("sul mio port: %d\n", ntohs(server_addr.sin_port));
new_sd=accept(sd,(struct sockaddr*) &client_addr, &client_len);
printf("\n\nHo accettato una connessione\n");
printf("dal client con port: %d\n\n", ntohs(client_addr.sin_port));
close(new_sd);
close(sd);
}

Rispondi quotando