-
Notifications
You must be signed in to change notification settings - Fork 0
/
quizzClient.c
144 lines (117 loc) · 3.33 KB
/
quizzClient.c
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
133
134
135
136
137
138
139
140
141
142
143
144
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <string.h>
/* codul de eroare returnat de anumite apeluri */
extern int errno;
/* portul de conectare la server*/
int port;
/* functia executata de thread-ul pentru countdown timer */
void *countdown(void *);
int main (int argc, char *argv[])
{
int sd; // descriptorul de socket
struct sockaddr_in server; // structura folosita pentru conectare
int nr=0;
char buf[10];
char username[20];
int startTime;
/* exista toate argumentele in linia de comanda? */
if (argc != 3)
{
printf ("Sintaxa: %s <adresa_server> <port>\n", argv[0]);
return -1;
}
/* stabilim portul */
port = atoi (argv[2]);
/* cream socketul */
if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
{
perror ("Eroare la socket().\n");
return errno;
}
/* umplem structura folosita pentru realizarea conexiunii cu serverul */
/* familia socket-ului */
server.sin_family = AF_INET;
/* adresa IP a serverului */
server.sin_addr.s_addr = inet_addr(argv[1]);
/* portul de conectare */
server.sin_port = htons (port);
/* ne conectam la server */
if (connect (sd, (struct sockaddr *) &server,sizeof (struct sockaddr)) == -1)
{
perror ("[client]Eroare la connect().\n");
return errno;
}
/* Adaugarea unui pseudonim */
printf("Introduceti username-ul: \n");
scanf("%s", username);
/* trimiterea username-ului la server */
if (write (sd, username, sizeof(username)) <= 0)
{
perror ("[client]Eroare la write() spre server a username-ului.\n");
return errno;
}
printf("Te-ai logat cu username-ul: %s\n", username);
/* citirea pozitiei countdown-ului dat de server
(apel blocant pina cind serverul raspunde) */
if (read (sd, &startTime, sizeof(int)) < 0)
{
perror ("[client]Eroare la read() de la server a pozitiei countdown-ului.\n");
return errno;
}
/* Este apelat countdown timer-ul*/
countdown(&startTime);
/* citirea mesajului */
printf ("[client]Introduceti un numar: ");
fflush (stdout);
read (0, buf, sizeof(buf));
nr=atoi(buf);
//scanf("%d",&nr);
printf("[client] Am citit %d\n",nr);
/* trimiterea mesajului la server */
if (write (sd,&nr,sizeof(int)) <= 0)
{
perror ("[client]Eroare la write() spre server.\n");
return errno;
}
/* citirea raspunsului dat de server
(apel blocant pina cind serverul raspunde) */
if (read (sd, &nr,sizeof(int)) < 0)
{
perror ("[client]Eroare la read() de la server.\n");
return errno;
}
/* afisam mesajul primit */
printf ("[client]Mesajul primit este: %d\n", nr);
/* inchidem conexiunea, am terminat */
close (sd);
};
void *countdown(void *arg)
{
int time=*((int *)arg);
while(time>=0)
{
//timeStart=time;
//printf("%f\n",(double)time/1000000);
if(((double)time/1000000)==(time/1000000))
{
if(time==0)
printf("\r JOCUL A INCEPUT! ");
else if(time>9000000)
printf("\rJocul va incepe in: %d secunde",time/1000000);
else
printf("\rJocul va incepe in: 0%d secunde",time/1000000);
fflush(stdout);
}
time=time-100000;
usleep(100000);
}
printf("\n");
};