Il testo che ci è stato assegnato è:
Creare un client con le seguenti specifiche entro 1 settimana:
1) Accetta a riga di comando la seguente sintassi:
server.exe [IP] [PORTA] messaggio]
secondo me viene in mente un'esempio del tipo
server.exe 137.204.72.5 9988 messaggiodiprova
2) Si connette A IP+PORTA
3) Legge una stringa A di 10 byte....quale? come deve essere questa stringa? Lui dice del tipo 0000000127.....come si fa?
4) Scrive una strnga B di 100 bytes concatenando il proprio nome,cognome,matricola sd A. E poi dice per riempire i caratteri mancanti usate lo spazio
5) Scrive un'intero C di 4 bytes (header) indicando quanti caratteri N spedirà in futuro. N= strlen(messaggio) che cosa vuol dire?
6) Scrive una stringa D di N caratteri
7) Legge una stringa E di 2 bytes : a. se E = "OK" il client ha avuto successo b. se E = ER il client ha commesso un errore del protocollo.
E quindi cosa devo fare? un menu? A-E .
Non ho capito o forse sono scemo?
Da quello che ho capito:
- il client prende in input da linea di comando ip e porta del server ed un messaggio
- il client richiede all'utente di inserire un testo di max 10 caratteri e lo legge
- il client crea una stringa contenente nome,cognome,matricola e il messaggio preso al passo precedente, andando a creare una stringa da 100 byte (mettendo tanti spazi bianchi in coda quanti servono per arrivare precisi a 100 caratteri)
- il client invia al server quanto generato al passo precedente
- il client invia al server un valore a 32bit contenente la lunghezza del messaggio preso da linea di comando quando è stato lanciato
- il client invia al server il messaggio preso da linea di comando e la cui lunghezza è stata calcolata e inviata al passo precedente
- il cliente legge la risposta del server (2 caratteri), se è OK scrive a video che tutto è andato bene, se è ER scrive a video che il protocollo non è stato rispettato.
Mi è stato dato questo server di prova da lanciare contemporaneamente sullo stesso PC.
Questo è il collegamento per scaricare i due file .
Dovreste compilare con il gcc -o client.exe client.c
e far partire 2 console:
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
http://www.4shared.com/dir/967499/e4aea6a7/sharing.html.
Questo è il mio client
Codice: Seleziona tutto
#include <stdio>
#include <string>
#include <netinet>
#include <stdlib>
#include <sys>
#include <arpa>
#include <sys>
#include <unistd>
int main(int argc, char*argv[])
{
struct sockaddr_in Serv;
int sock,i;
/* Dichiarazione dei messagg di scambio
char messaggio[1000];
char msg1[1000];
char msg2[1000];
char msg3[1000];
*/
char matricola[7]="240140"; // Dichiarazione della matricola
char ip[100]; //Dichiarazione dell'IP
char nome[17]="cristian,capannini"; //Dichiarazione del nome e cognome
strncpy(ip,argv[1],99); //Ricevo l'argomento e lo metto in ip
sock=socket(AF_INET,SOCK_STREAM,0);
memset((void*)&Serv,0,sizeof(Serv)); // è una funzione che non ricordo bene come definirla
Serv.sin_family=AF_INET;
Serv.sin_addr.s_addr=inet_addr(ip);
Serv.sin_port=htons(9977); //numero della porta
nome[17]='\0';
matricola[7]='\0';
if(connect(sock,(struct sockaddr*)&Serv,sizeof(Serv))==-1)
{
printf("Connect");
exit(1);
}
printf("%s\n",nome);
printf("%s\n",matricola);
//ricevo la stringa da 15
recv(sock,messaggio,15,0);
strcat(messaggio,nome); //concateno il nome con la stringa
for(i=27;i<50;i++)
{
messaggio[i]='+'; //mette a più i caratteri restanti
}
messaggio[50]='\0';
printf("%s\n",messaggio);
send(sock,messaggio,50,0); manda al socket il messaggio
//ricevi la stringa da 20
recv(sock,msg1,20,0); ricevi dal socket il messaggio
strcat(msg1,matricola);
for(i=26;i<49;i++)
{
msg1[i]='*'; /* mette a * i caratteri restanti
}
msg1[49]='\0';
printf("%s\n",msg1);
send(sock,msg1,49,0); manda al socket il msg1
//scrivere stringa da 39
strncpy(msg2,messaggio,15);
msg2[15]='\0';
strcat(msg2,matricola);
for(i=21;i<39;i++)
{
msg2[i]='>';
}
msg2[39]='\0';
printf("%s\n",msg2);
send(sock,msg2,39,0); manda al socket il msg2
//ricevere una stringa da 7
recv(sock,msg3,7,0); //ricevi dal socket il messaggio
printf("%s\n",msg3);
close(sock); // chiude il socket
return(0);
}

