PDA

Visualizza la versione completa : [C] Programmazione socket con scambio nomi file e contenuti tra client e server


shioc
27-12-2007, 20:04
ciao a tutti!qualcuno mi sa svolgere questa socket in c...ve ne sarei molto grata
la socket questa:
Si realizzi un'applicazione Client/Server che utilizzi le socket Windows e in cui un Client richiede al Server di ricercare una stringa (stringa) all'interno di un file (nomeFile). In particolare:
- il Client riceve da tastiera stringa e nomeFile e invia al server il nome del file nomeFle e il contenuto del file stesso, all'interno del quale il Server ricerca la stringa siringa.
- Il risultato dell'operazione di ricerca ("stringa stata trovata/non stata trovata in NomeFile") deve essere messo in un file chiamato ancora nomeFle ma che si deve trovare all'interno della directory .../tmp (sotto-directory della directory corrente).
- Il server deve evitare di sovrascrivere i file: se il file nomeFile non gi presente all'interno di .../tmp, effettua la ricerca, altrimenti no.
Al termine dell'operazione richiesta, il Server manda al Client il numero di ricerche svolte con successo (numero di file in .../tmp) fino a quel momento (cio verso qualunque Client dall'inizio delle operazioni del Server).



rispondetemi...vi prego...ho l'esame a breve
buon natale a tutti

pallinopinco
27-12-2007, 20:43
ciao a tutti!qualcuno mi sa svolgere questa socket in c...ve ne sarei molto grata
la socket questa:
Si realizzi un'applicazione Client/Server <...>

rispondetemi...vi prego...ho l'esame a breve


Mi dispiace dirtelo ma dalla domanda che hai posto si deduce che non sai neanche cosa sia "una socket", prova a studiare un po', proponi una soluzione non funzionante POI ci lavoriamo insieme.

shioc
27-12-2007, 20:47
...prima di parlare dovresti sapere...
cmq sto studiando + ke mai e non ho scrupoli di coscienza n tantomeno mi tange la tua offesa..
cmq se vuoi proprio saperlo la sto facendo ma vorrei una conferma da qualcuno ke ne sa + di me...forse so io + di te visto ke anzicch darmi una soluzione mi dai una critica...
ciao

pallinopinco
27-12-2007, 20:51
Nessuna offesa e nessuna critica, la domanda denota scarsa conoscenza dell'argomento. Se stai lavorando alla soluzione postala quanto prima e ti diamo volentieri una mano (come ho detto anche nel messaggio precedente).

shioc
27-12-2007, 20:54
ok...allora spero di risolverlo al + presto

shioc
05-01-2008, 00:25
Allora come avevo detto su questa socket ci sto lavorando e fino ad ora ho fatto questo ma ho alcuni dubbi
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <syslog.h>
#include <netinet/in.h>
#include <netdb.h>

#define BUFFERSIZE 1024

main(int argc,char *argv[] )
{
//Dichiarazioni

//Buffer della socket socket
char filebuffer[BUFFERSIZE];
//Descrittore socket
int sd;
//Esito della connessione
int psd;
//Numero di bytes rivevuti
int nload;
//Struct dell'indirizzo del server
struct sockaddr_in server;
//Struct di tipo hostent (per la conversione di indirizzi) del client
struct hostent *host;

//Controllo dell'interfaccia del client
if(argc!=4)
{
printf("Non sono stati inserititi tutti i parametri");
printf("L'interfaccia è: remote_sort nodoserver file stringa");
exit(1);
}

memset ((char *)&server, 0, sizeof(struct sockaddr_in));/* clear sockaddr structure */

//Inizio connessione
host = gethostbyname(argv[1]);
server.sin_family = AF_INET;
server.sin_addr.s_addr=((struct in_addr*)(host->h_addr))->s_addr;
server.sin_port = 12347;

//Creazione socket
sd=socket(AF_INET, SOCK_STREAM, 0);
if(sd<0)
{
perror("apertura socket");
exit(1);
}
else printf("\nClient: creata la socket sd=%d\n", sd);

//Connessione al server
psd=connect(sd,(struct sockaddr *) &server,sizeof(struct sockaddr));
if(psd<0)
{
perror("Errore in connect");
exit(1);
}
else printf("Client: connect ok\n");


//Caricamento in filebuffer del contenuto del file
FILE *file = fopen(argv[2],"r");//"r"lettura mode
if (file==NULL) return 0;
strcpy(filebuffer,"");//copia"" in filebuffer
fflush(stdin);//su uno stream di output provoca la scrittura di dati bufferizzati
ma non ancora scritti su uno stream di input,l'effeto indefinito
rewind(file);
fscanf(file,"%s",&filebuffer);
printf("\nstringaletta dal File: %s\n",filebuffer);

//Invio di filebuffer
send(sd,filebuffer,BUFFERSIZE,0);
printf("Stringa inviata, aspetto risposta\n\n");

***//Ricezione della stringa in filebuffer
nload = recv(sd,filebuffer,BUFFERSIZE, 0);
printf("Stringa ricevuta: %s\n",filebuffer);

//Salvataggio del file
FILE *fileord = fopen(argv[3],"w");
fprintf(fileord,"%s",filebuffer);
printf("File Salvato\n\n");
fclose(file);
fclose(fileord);
close(sd);
exit(0);
}
ma ho molti dubbi...questo solo il client...il server poi mi d ancora + preoccupazioni:)
aspetto notizie

}

Loading