PDA

View Full Version : COPRIMI - App Client-Server


antoniodna87
07-02-2015, 21:06
Salve ragazzi sto realizzando questa piccola app per vedere se 2 numeri sono o meno coprimi. Due numeri sono coprimi quando il loro MCD è 1 (ma già lo sapevate). Ad ogni modo ho già realizzato il codice in python e java ma non riesco a farlo in c. In particolare non riesco a capire come posso fare per passare un array di stringhe dal client al server. L'array è di dimensione 2 e contiene i 2 numeri che andranno inseriti lato client. Di seguito vi allego il codice sia client che server. Grazie a tutti!

CLIENT:
#include <stdio.h>
#include <sys/types.h> /* libreria types socket */
#include <sys/socket.h> /* per le funzioni per la comunicazione socket */
#include <netinet/in.h> /* per IP */
#include <arpa/inet.h> /* per le variabili sockaddr_in e inet_addr() */
#include <stdlib.h> /* per la conversione da stringa a intero o a float */
#include <string.h> /* per memset() strcpy() strlen() */
#include <unistd.h> /* per chiusura connessione */
#include <string.h> /* per strlen()*/

int main() {

char *array[2];
char num1[10];
char num2[10];

// Inizializzazione variabili
struct sockaddr_in serverAddr;
socklen_t addr_size = sizeof(serverAddr);

int portNum = 2020;

serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(portNum);

serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); /* Per indirizzo ip */

memset(serverAddr.sin_zero, '\0', sizeof(serverAddr.sin_zero));


int clientSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
int connessione = connect(clientSocket, (struct sockaddr*)&serverAddr, addr_size);
if (connessione == -1) printf("Errore connessione socket\n"); //Stampa errore se non si connette

else {
printf("\nInserisci primo numero -> ");
scanf("%s",num1);
printf("\nInserisci secondo numero -> ");
scanf("%s",num2); }
array[0] = num1;
array[1] = num2;

#Invio tutto l'array al server che lo lavora
#Ricevo dal server se i numeri sono o meno COPRIMI
return 0;
} /* Fine main */


SERVER:
#include <stdio.h>
#include <sys/types.h> /* libreria types socket */
#include <sys/socket.h> /* per le funzioni per la connessione socket */
#include <netinet/in.h> /* per IP */
#include <arpa/inet.h> /* per le variabili sockaddr_in e inet_addr() */
#include <stdlib.h> /* per la conversione da stringa a intero o a float */
#include <string.h> /* per memset() strcpy() strlen() strcat()*/
#include <unistd.h> /* per chiusura connessione */

//Inizio main
int main()
{
char *array[2];
struct sockaddr_in sAddr;
struct sockaddr_storage sStorage;

socklen_t addr_size = sizeof(sStorage);

/* Creazione socket */
int welcomeSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); /* PROTOCOLLO TCP */
if (welcomeSocket < 0) printf("Errore accettazione socket\n");
int portNum = 2020; //numero porta

// Inizializzazione del tipo di indirizzo
sAddr.sin_family = AF_INET;

// Inizializzazione della porta
sAddr.sin_port = htons(portNum);
sAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
memset(sAddr.sin_zero, '\0', sizeof(sAddr.sin_zero));


int a = bind(welcomeSocket, (struct sockaddr*)&sAddr, sizeof(sAddr));
if (a < 0) printf("Errore porta occupata\n");
else
{
if (listen(welcomeSocket, 1024) == -1) printf("Errore.\nConnessione non riuscita\n");
if (listen(welcomeSocket, 1024) == 0) printf("SERVER PRONTO AD ASCOLTARE.\n");

//Inizio ciclo comunicazione client-server
while (1)
{
int cfd = accept(welcomeSocket, (struct sockaddr*)&sStorage, &addr_size);
if(cfd<0) printf("Impossibile accettare una nuova connessione dal client\n");

#ricevi i 2 numeri dal client
#richiama la funzione (ancora da definire MCD)
#in base al valore restituito da MCD comunica al server se COPRIMI o no
}
close(welcomeSocket); //chiusura socket
return 0;
}
}