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,