Anzitutto un ciao a tutti, visto che è la prima volta che posto qui =)
Ora passo direttamente al problema:
devo programmare sotto ambiente Linux un server con le seguenti caratteristiche
-il processo padre SRV genera SRV_1 e SRV_2, che gestiscono 2 canali tra loro e 2 client (CLI_1 e CLI_2)
1) SRV_X entra in ciclo e:
-riceve da CLI_X una sequenza di caratteri (max 5) terminata da '\n', che viene convertita in formato numerico (IDX)
-apre il file 'term.txt', legge il carattere alla posizione IDX, lo memorizza e chiude il file. Il char letto diventa CH_TERM
-riceve un'altra sequenza di caratteri (max 64), il cui ultimo carattere è il CH_TERM di cui sopra
-conta il numero di caratteri ricevuti in questo modo e reinvia al client il conteggio
2) Il ciclo termina quando SRV_X legge dal file un carattere CH_TERM corrispondente a 'q'
3) SRV_X chiude il canale
4) SRV chiude il canale usato e termina (senza aspettare il termine dei servizi)
Qui sotto riporto un sorgente buttato giù in fretta; sottolineo che ho pochissima dimestichezza con la funzione 'fork' e che non conosco i comandi per far aprire e scorrere un file.
codice:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket>
#include <netinet/in.h>
#include <string.h>
#define MAXCONN 5
#define SRVPORT 37501
void addr_initialize(struct sockaddr_in *addr,int port, long ip){
addr->sin_family=AF_INET
.....
.....
}
int main(){
int sd,sd1,sd2,i,IDX,n,pid1,pid2;
struct sockaddr_in server,client1,client2;
int srvlen=sizeof(server);
int clilen1=sizeof(client1);
int clilen2=sizeof(client2);
char ch,lun[5],seq[64],CH_TERM;
char TERM='\n';
sd=socket(AF_INET,SOCK_STEAM,0);
if(sd==-1){
/* errore, chiudo connessione (non lo sto a scrivere ogni volta se no non finisco + ;p) */
}
bind(...);
listen(...);
sd1=accept(sd,(struct sockaddr_in*)&client1,clilen1);
if(...) /* solito controllo */
sd2=accept(sd,(struct sockaddr_in*)&client2,clilen2);
if(...) /* solito controllo */
pid1=fork();
pid2=fork();
if(pid1==0){
i=0;
do{
n=recv(sd1,&lun[i],1,0
}
if(...) /*controllo sulla receive*/
i++ }
while(lun[i-1]!=TERM);
IDX=atoi(lun); /*per convertire il numero di caratteri*/
/*a questo punto vuoto totale: devo fargli aprire il file, fargli leggere il char alla posizione IDX-esima; oltre a questo c'è il fatto che non so se l'uso della fork fosse corretto, nè se effettivamente i client verranno gestiti in parallelo..
il tutto poi lo riscriverei per gestire client2*/
}
Grazie per l'attenzione =)