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:
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);
}
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 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;
}