Witam,

Mam wykonać takie zadanie:
Klient ma przesłać do serwera dane a, b, c. Serwer ma je odebrać, obliczyć pierwiastki funkcji kwadratowej ax^2 + bx + c i odesłać je do klienta.

Mój kod nie działa do końca poprawnie, odbiera tylko dane a i b.

Kod serwer:

 
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/un.h>
#include <unistd.h>

void blad()
{
   perror("Blad Serwera");
   exit(1);
}

int main()
{
  int gniazdo_serwera;
  int gniazdo_dla_klienta;
  int serwer_dlugosc;
  int klient_dlugosc;
  int test1, test2, test3, test4, test5, test6, test7;
  int A, B, C;
  int suma;
  struct sockaddr_un adres_serwera;
  struct sockaddr_un adres_klienta;


// Usuniecie starego gniazda
unlink("gniazdo_serwera");

//Utworzenie gniazda serwera
test1 = gniazdo_serwera=socket(AF_UNIX,SOCK_STREAM,0);
if(test1==-1) blad();

//Zwiazanie gniazda serwera z adresem
adres_serwera.sun_family=AF_UNIX;
strcpy(adres_serwera.sun_path,"gniazdo_serwera");
serwer_dlugosc=sizeof(adres_serwera);
test2=bind(gniazdo_serwera,(struct sockaddr*)&adres_serwera,serwer_dlugosc);
if(test2==-1) blad();

//Utworzenie kolejki dla oczekujacych polaczen
test3=listen(gniazdo_serwera,5);
if(test3==-1) blad();

printf("Serwer nasluchuje ... \n");

// Komunikacja gniazda serwera z gniazdem klienta
while(1)
{
//Przyjecie polaczenia przez gniazdo serwera
gniazdo_dla_klienta = accept(gniazdo_serwera,(struct sockaddr*)&adres_klienta,&klient_dlugosc);

test4=read(gniazdo_dla_klienta,&A,1);
if(test4>0) printf("Odebralem od klienta liczbe %d.\n",A);
else blad();

test5=read(gniazdo_dla_klienta,&B,1);
if(test5>0) printf("Odebralem od klienta liczbe %d.\n",B);
else blad();

test6=read(gniazdo_dla_klienta,&C,1);
if(test6>0) printf("Odebralem od klienta liczbe %d.\n",C);
else blad();

suma = A + B + C;

test7=write(gniazdo_dla_klienta,&suma,1);
if(test7>0) printf("Wysylam dane do klienta suma %d.\n",suma);
else blad();

close(gniazdo_dla_klienta);
}
close(gniazdo_serwera);
exit(0);
}

Kod klient:

 

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/un.h>
#include <unistd.h>

void blad()
{
   perror("Blad Serwera");
   exit(1);
}

int main()
{
  int gniazdo_klienta;
  int serwer_dlugosc;
  int suma;  
  int A, B, C;
  int test1, test2, test3, test4, test5, test6, test7;  
  struct sockaddr_un adres_serwera;

//Utworzenie gniazda klienta
test1=gniazdo_klienta=socket(AF_UNIX,SOCK_STREAM,0);
if(test1==-1) blad();

//Ustalenie adresu serwera
adres_serwera.sun_family=AF_UNIX;
strcpy(adres_serwera.sun_path,"gniazdo_serwera");
serwer_dlugosc=sizeof(adres_serwera);
//Polaczenie gniazda klienta z gniazdem serwera
test1=connect(gniazdo_klienta,(struct sockaddr*)&adres_serwera,serwer_dlugosc);
if(test1==-1) blad();

//Komunikacja gniazda serwera z gniazdem klienta
printf("A: \n");
scanf("%d", &A);

test4=write(gniazdo_klienta,&A,1);
if(test4>0) printf("Wyslalem do serwera liczbe %d.\n",A);
else blad();

printf("B: \n");
scanf("%d", &B);

test5=write(gniazdo_klienta,&B,1);
if(test5>0) printf("Wyslalem do serwera liczbe %d.\n",B);
else blad();

printf("C: \n");
scanf("%d", &C);

test6=write(gniazdo_klienta,&C,1);
if(test6>0) printf("Wyslalem do serwera liczbe %d.\n",C);
else blad();

test7=read(gniazdo_klienta,&suma,1);
if(test7>0) printf("Otrzymalem od serwera suma %d.\n",suma);
else blad();
close(gniazdo_klienta);
exit(0);
}

Z góry dziękuję za pomoc,