-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathServer.c
More file actions
132 lines (111 loc) · 3.64 KB
/
Server.c
File metadata and controls
132 lines (111 loc) · 3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* servTCPIt.c - Exemplu de server TCP iterativ
Asteapta un nume de la clienti; intoarce clientului sirul
"Hello nume".
Autor: es
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* portul folosit */
#define PORT 20024
/* codul de eroare returnat de anumite apeluri */
extern int errno;
int main ()
{
struct sockaddr_in server; // structura folosita de server
struct sockaddr_in from;
char msg[100]; //mesajul primit de la client
char msgrasp[100]=" "; //mesaj de raspuns pentru client
int sd; //descriptorul de socket
float principal_amt, rate, simple_interest;
int time;
/* crearea unui socket */
if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
{
perror ("[server]Eroare la socket().\n");
return errno;
}
/* pregatirea structurilor de date */
bzero (&server, sizeof (server));
bzero (&from, sizeof (from));
/* umplem structura folosita de server */
/* stabilirea familiei de socket-uri */
server.sin_family = AF_INET;
/* acceptam orice adresa */
server.sin_addr.s_addr = htonl (INADDR_ANY);
/* utilizam un port utilizator */
server.sin_port = htons (PORT);
/* atasam socketul */
if (bind (sd, (struct sockaddr *) &server, sizeof (struct sockaddr)) == -1)
{
perror ("[server]Eroare la bind().\n");
return errno;
}
/* punem serverul sa asculte daca vin clienti sa se conecteze */
if (listen (sd, 5) == -1)
{
perror ("[server]Eroare la listen().\n");
return errno;
}
/* servim in mod iterativ clientii... */
while (1)
{
int client;
int length = sizeof (from);
printf ("[server]Asteptam la portul %d...\n",PORT);
fflush (stdout);
/* acceptam un client (stare blocanta pina la realizarea conexiunii) */
client = accept (sd, (struct sockaddr *) &from, &length);
/* eroare la acceptarea conexiunii de la un client */
if (client < 0)
{
perror ("[server]Eroare la accept().\n");
continue;
}
/* s-a realizat conexiunea, se astepta mesajul */
bzero (msg, 10);
bzero (&principal_amt, 4);
bzero(&rate, 4);
bzero (&time, 4);
printf ("[server]Asteptam mesajul...\n");
fflush (stdout);
/* citirea mesajului */
if (read (client, msg, 100) <= 0)
{
perror ("[server]Eroare la read() de la client.\n");
close (client); /* inchidem conexiunea cu clientul */
continue; /* continuam sa ascultam */
}
printf ("[server]Mesajul a fost receptionat...%s\n", msg);
printf ("[server]Mesajul a fost receptionat...%s\n", &time);
simple_interest = (principal_amt * rate * time) / 100.0;
printf("Amount = Rs. %5.2f\n", principal_amt);
printf("Rate = Rs. %5.2f%\n", rate);
printf("Time = %d years\n", time);
printf("Simple interest = %5.2f\n", simple_interest);
/*pregatim mesajul de raspuns */
bzero(msgrasp,100);
bzero (&principal_amt, 4);
bzero(&rate, 4);
bzero (&time, 4);
strcat(msgrasp,"Hello ");
strcat(msgrasp,msg);
printf("[server]Trimitem mesajul inapoi...%s\n",msgrasp);
printf("[server]Trimitem mesajul inapoi...%s\n",simple_interest);
/* returnam mesajul clientului */
if (write (client, msgrasp, 100) <= 0)
{
perror ("[server]Eroare la write() catre client.\n");
continue; /* continuam sa ascultam */
}
else
printf ("[server]Mesajul a fost trasmis cu succes.\n");
/* am terminat cu acest client, inchidem conexiunea */
close (client);
} /* while */
} /* main */