cest31
Newbie
Karma: +0/-0
Scollegato
Messaggi: 2
|
 |
« inserita:: Settembre 28, 2010, 02:30:06 pm » |
|
Raga Buona sera premetto che è il mio primo post in questo forum, quindi mi scuso se erroneamente effettuo qualche errore sintattico legato alle regole del forum.. Cmq passando alle cose da veri "Smanettoni". Mi sono inbattuto in un problema alquanto insolito , stupido, ma ahime per me complesso. Adesso vi spiego e poi posto il codice.. Devo creare un duo Server-client che si scambino alcuni messaggi; adesso ho notato che le read scritte all'interni di cicli (while) perdono la loro qualità bloccante...Ecco questo mi sta facendo impazzire da un paio di giorni...adesso vi posto le sezioni di codice interessati..Sperando in un vostro aiuto o in una qualche vostra considerazione che mi accenda qualche lampadina... Adesso vi posto i codici, il server scrive al client due cose e poi dovrebbe attendere una risposta dal client,attendere grazie alla read che blocca.Ma niente la read non ne vuole proprio sentire a bloccare..
Ecco il Server void effective_game(int sock,int gettoni){ srand(time(NULL)); int carta,letti,k=0; char carta_clie, seme_clie,seme_send[1],clie_send[1],mia_carta[1],scelta[2],scleta[2]; char mazzo1[]="23456789LJKQA23456789LJKQA23456789LJKQA23456789LJKQA"; char mazzo2[]="FFFFFFFFFFFFFQQQQQQQQQQQQQPPPPPPPPPPPPPCCCCCCCCCCCCC"; do{ carta_clie = mazzo1[rand()%51+0]; seme_clie = mazzo2[rand()%51+0]; seme_send[0]=seme_clie; clie_send[0]=carta_clie; write(sock,clie_send,1); write(STDOUT_FILENO,clie_send,1); write(sock,seme_send,1); write(STDOUT_FILENO,seme_send,1); letti=read(sock,scelta,1); // Questa è la read che non fa da bloccante scelta[1]='\0'; write(STDOUT_FILENO,scelta,strlen(scelta)); }while((atoi(scelta))==2);
Ecco il client
if(pipe(pi_pip)<0){ printf("ERRORE PIPE");} if(pipe(popo)<0){ printf("ERRORE PIPE");} while(y==0){ if((pid=fork())<0){ printf("ERRORE FORK");} else if(pid==0){ //figlio write(STDOUT_FILENO,"\nCosa vuole fare??\n\n1)Fermarsi\n2)Chiamare carta\n3)Abbandonare la mano\n",70); alarm(30); scanf("%s",buff); alarm(0); close(popo[0]); write(popo[1],"scritto",7); close(pi_pip[0]); write(pi_pip[1],buff,1); exit(0);} else if(pid!=0){ wait(0); close(popo[1]); read(popo[0],buffer,7); if(strncmp(buffer,"scritto\0",7)==0){ close(pi_pip[1]); letti=read(pi_pip[0],risp_input,1); write(socket,risp_input,1);} QUI è DOVE MANDO L'INFORMAZIONE AL SERVER
|