Ciao a tutti vi posto il codice che mi sta facendo davvero smadonnare:
L'idea è che il Client fa la write sul socket di 2 interi dopodichè li manda al server che fa la read dei 2 numeri, li somma e fa la write del risultato sul socket da reinviare al client che leggerà il risultato e lo stamperà a schermo.
Il problema è la read del client perchè il client subito dopo la write si mette in ascolto e non riceve il risultato dal server.
Mi potete aiutare? :'(
SERVER:
CLIENT:codice:#include <sys/types.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include<time.h> #include <signal.h> int main(int argc, char **argv) { int somma,list,n,conn; int recvline[2]; socklen_t len; struct sockaddr_in server,richiesta; if((list=socket(PF_INET,SOCK_STREAM,0))<0) { perror("socket"); exit(1); } server.sin_port=htons(1024); server.sin_family=PF_INET; server.sin_addr.s_addr=htonl(INADDR_ANY); if((bind(list,(struct sockaddr*)&server,sizeof(server)))<0) { perror("bind"); exit(1); } if((listen(list,4))<0) { perror("listen"); exit(1); } while(1) { len=sizeof(richiesta); if((conn=accept(list,(struct sockaddr*)NULL,NULL))<0) { perror("accept"); exit(1); } while((n=read(conn,recvline,sizeof(recvline)))>0) { recvline[n]=0; } if(n<0) { fprintf(stderr,"read error \n"); exit(1); } int c,i; c=recvline[0]+recvline[1]; puts(""); printf("INPUT\nx: %d\ny: %d\nRISULTATO\nx+y: %d\n",recvline[0],recvline[1],c); //RICEVE I DATI ORA DEVE RISCRIVERLI SUL SOCKET recvline[0]=c; //ora dobbiamo fare la write sul coscket if((write(conn,&c,sizeof(int)))!=sizeof(int)) { printf("write error"); exit(1); } puts("write fatta"); } close(conn); }
codice:#include <sys/types.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include<time.h> #include <signal.h> int main(int argc, char **argv) { int sock,n=0; int buffer[2]; puts("inserisci x ed y"); scanf("%d %d",&buffer[0],&buffer[1]); printf("%d %d \n",buffer[0],buffer[1]); if((sock=socket(PF_INET,SOCK_STREAM,0))<0) { puts("socket error"); exit(1); } struct sockaddr_in client; client.sin_port=htons(1024); client.sin_family=PF_INET; if((inet_pton(PF_INET,argv[1],&client.sin_addr))<0) { puts("errore codifica dati"); exit(1); } if(connect(sock,(struct sockaddr*)&client,sizeof(client))==-1) { puts("connect error"); exit(1); } //passaggio parametri a server if((write(sock,buffer,sizeof(buffer)))!=sizeof(buffer)) { printf("write error"); exit(1); } //ora dobbiamo leggere i dati dal socket int ris; puts("sono prima della read del client"); if((n=read(sock,&ris,sizeof(int)))==-1) { puts("read error"); } puts(""); printf("risultato: %d\n",ris); return 0; }

Rispondi quotando