Client in c

bembem85

Nuovo Utente
23
0
Ecco il mio client.c :

Codice:
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <arpa/inet.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 

#define   NOME   "nome" 
#define   COGNOME   "cognome" 
#define   MATR   "11111" 

void addr_init(struct sockaddr_in *addr, int port, long ip) { 
   addr->sin_family = AF_INET; 
   addr->sin_port = htons((u_short)port); 
   addr->sin_addr.s_addr = ip; 
} 

main(int argc, char **argv)  { 
   int i,size,N; 
   int sd,PORT; 
   char a[10],b[100],*d,e[2]; 
   char *msg; 
   struct sockaddr_in client_addr, server_addr; 

   // Controllo gli argomenti 
   if (argc<4)  { 
      printf ("Usage: %s <ip> <port> <msg>\n", argv[0]); 
      exit(1); 
   } 
    
   if ((PORT=atoi(argv[2]))<=0)  { 
      printf ("Porta non valida\n"); 
      exit(1); 
   } 
    
   // Inizializzo l'indirizzo per la 
   // comunicazione con il server 
   addr_init(&server_addr, PORT, inet_addr(argv[1])); 

   // Inizializzo il socket 
   if ((sd=socket(AF_INET, SOCK_STREAM, 0))==-1)  { 
      printf ("Errore nella creazione del socket\n"); 
      exit(2); 
   } 

   // Mi connetto al server 
   if (connect(sd, (struct sockaddr*) &server_addr, sizeof(struct sockaddr))==-1)  { 
      printf ("Errore nella connessione all\'host %s\n", inet_ntoa(server_addr.sin_addr)); 
      exit(3); 
   } 
    
   // Punto (3) 
   recv (sd,a,10,0); 
    
   // Punto (4) 
   sprintf (b,"%s%s%s%s", a,NOME,COGNOME,MATR); 
    
   N=strlen(a)+strlen(NOME)+strlen(COGNOME)+strlen(MATR); 
    
   for (i=N; i<100; i++) 
      b[i]=' '; 
       
   send (sd,b,100,0); 
    
   // Punto (5) 
   msg=argv[3]; 
   N=strlen(argv[3]); 
    
   send (sd, (int*) &N, sizeof(int), 0); 
    
   // Punto (6) 
   d = (char*) malloc(N*sizeof(char)); 
    
   printf ("Stringa di N caratteri da inviare: "); 
   fgets (d,N,stdin); 
   d[strlen(d)]='\0'; 
   send (sd,d,N,0); 
    
   // Punto (7) 
   recv(sd,e,2,0); 
    
   if (!strcmp(e,"OK")) 
      printf ("Transazione completata con successo\n"); 
   if (!strcmp(e,"ER")) 
      printf ("Errore nella transazione dei dati\n"); 
       
   close(sd); 
}

Il server di prova è quello che vedete in allegato e bisogna fare così:

Per lanciare il server di prova:

./server 9999 log.txt 1 messaggio

Per lanciare il client di prova:
./client 127.0.0.1 9999 messaggio

Solo che quando scrivo per esempio messaggion mi dà errore del tipo:

accept() from IP 127.0.0.1
read msg1 '424 Hnomecognome11111
'[100]
read msg3 '9'
read msg3 'messaggi' [8]
check_fallito codice del messaggio
check_fallito -> elaborato non superato RIPROVA!
Come devo fare?
Help help help!!!!
 

Arcovoltaico77

Utente Èlite
1,558
10
CPU
Core 2 Duo E2200 + Thermaltake silent tower 112cu (1,3 Kg)
Scheda Madre
Asus P5B
HDD
160Gb Maxtor SATA2 + WD Caviar 250GB SATA2
RAM
2 * 1Gb Corsair CL4 (Pc4300, Value Select)
GPU
Point of View 6600GT 256Mb (500-1000 @ 571-1183)
Audio
integrato 5.1
Monitor
LCD 17 samsung
PSU
Enermax Pro82+ 525 Watt
Case
ColorsIT
OS
Windows XP & Ubuntu
intanto benvenuto/a sul forum ...

poi, è più utile se inserisci il codice sorgente del server, invece dell' eseguibile... e se indichi che cosa dovrebbero fare questi due programmini: immagino qualcosa tipo un semplice protocollo per scambiarsi qualcosa, visto che il client invia della roba e si aspetta qualcos' altro indietro...

Descrivici cosa dovrebbe fare, insomma...
Cos'è, un esercizio di qualche esame universitario?

:ok:
 

K.I.

Utente Èlite
1,644
7
CPU
Intel Prescott 530J con Zalman 7700CU
Scheda Madre
Asus P5GD2
HDD
Maxtor Sata 160Gb e Floppy
RAM
Micron 1024Mb
GPU
Asus 6600GT PCI-E
Audio
Onboard con Creative GD580
Monitor
HP F2105 e Scheda TV Terratec Cinergy 600TV
PSU
Enermax Noisetaker 485W
OS
Windowd XP e Kubuntu 7.04
Arcovoltaico77 ha detto:
intanto benvenuto/a sul forum ...

poi, è più utile se inserisci il codice sorgente del server, invece dell' eseguibile... e se indichi che cosa dovrebbero fare questi due programmini: immagino qualcosa tipo un semplice protocollo per scambiarsi qualcosa, visto che il client invia della roba e si aspetta qualcos' altro indietro...

Descrivici cosa dovrebbe fare, insomma...
Cos'è, un esercizio di qualche esame universitario?

:ok:

E' lo stesso di Ccs :) La conosci?

Ciao!
 

Arcovoltaico77

Utente Èlite
1,558
10
CPU
Core 2 Duo E2200 + Thermaltake silent tower 112cu (1,3 Kg)
Scheda Madre
Asus P5B
HDD
160Gb Maxtor SATA2 + WD Caviar 250GB SATA2
RAM
2 * 1Gb Corsair CL4 (Pc4300, Value Select)
GPU
Point of View 6600GT 256Mb (500-1000 @ 571-1183)
Audio
integrato 5.1
Monitor
LCD 17 samsung
PSU
Enermax Pro82+ 525 Watt
Case
ColorsIT
OS
Windows XP & Ubuntu
a me sembrerebbe che l' errore sia nel punto 5 , dove invii al server la lunghezza della stringa che gli invierai al punto 6 :

nella traccia dice espressamente che deve essere un intero di 4 byte, e dà come suggerimento "usare typedef union", che tu non usi... immagino che se il server legge male la lunghezza dei dati il punto 6 darà errore (è sul punto 6 che ti dà errore, giusto?)
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili