Pages: [1]   Go Down
Print
Author Topic: fingerc  (Read 767 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
rox
Forumista
***
Offline Offline

Posts: 633


« on: 01-12-2011, 17:01:43 »

ho provato a modificare il programma del professore e ho scritto queste righe di codice ...
Code:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h> //per atoi
#include <errno.h>

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

#define MAXHN 128 //lunghezza massina del nome dell'host 128
#define MAXBUF 32*1024 //lunghezza massima del buffer

int main(int argc,char *argv[])
{
char hostname[MAXHN],buffer [MAXBUF];
struct  hostent * host;
struct  sockaddr_in addr;
u_int16_t fport;//indirizzo di porta a 16 bit unsigned
int s,retcode;
size_t nbytes;
if( argc!=4)
{
printf("immettere gli argomenti come segue:indirizzo(o hostname)   stringa(da farsi mandare)  numero di porta \n");
exit(1);
}
strcpy(hostname,argv[1]);
strcpy(buffer,argv[2]);

fport=htons((uint16_t)atoi(argv[3])); //htons serve per convertire i byte che arrivano dalla rete codificati in big endian
//in byte che la macchina può leggere (little endian)
int c;   //atoi converte da ascii a int



addr.sin_family=AF_INET;
addr.sin_port=fport;

memcpy(&addr.sin_addr, host->h_addr_list[0],nbytes=sizeof(addr.sin_addr)); //quando chiamiamo google per esempio abbiamo
//una lista di server gestiti e quando facciamo
//la richiesta con l'hostname prenderemo
//l'indirizzo ip del server più vicino
//printf("%d\n",fport);

s=socket(AF_INET,SOCK_STREAM,0);
printf("%d",c);
if (connect(s, (struct sockaddr *) &addr, sizeof(addr)) 
        == -1 ) {perror("connecting"); exit(-2);}

if (write(s, buffer, strlen(buffer)) == -1)
{perror("writing to socket"); exit(-3);}

while ((retcode=read(s,buffer,MAXBUF-1)) !=0){
buffer[retcode]='\0';
printf("\n ---read %d bytes---\n",retcode);
printf("%s",buffer);
}
printf("\n chiusura con il server");
close(s);
exit(0);
}


non mi dà nessun errore di compilazione ,ma appena lo avvio mi dà un errore:segmentation fault...perchè? ho controllato con il codice del professore e sembrerebbe tutto corretto ...
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
Damon Baird
Matricola
*
Offline Offline

Gender: Male
Posts: 67



« Reply #1 on: 02-12-2011, 09:59:21 »

Non vorrei dire cavolate yoh, secondo me il problema sta nel memcpy, hai scordato di copiare nella struct host il tuo indirizzo facendo"host=gethostbyname(hostname);";
Prova e fammi sapere se funziona
Logged
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #2 on: 02-12-2011, 10:25:13 »

adesso funziona. ma non capisco perchè non mi stampa tutta la stringa , ma solo fino a stringa-1 . bhoooo
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
Pages: [1]   Go Up
Print
Jump to: