Ecco il mio client.c :
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!!!!
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!!!!