-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.c
95 lines (73 loc) · 1.78 KB
/
client.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
//gcc client.c -o client
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
void replace(char *psz, char c, char w)
{
psz = strchr(psz, c);
if (psz != NULL)
{
*psz = w;
}
}
int main(int argc , char *argv[])
{
struct sockaddr_in addrServer;
char szServerReply[128];
int nSocketDesc, nRecv, nOldFL;
char szCommand[64];
// Create socket
nSocketDesc = socket(AF_INET, SOCK_STREAM, 0);
if (nSocketDesc == -1)
{
printf("Could not create socket");
return 1;
}
addrServer.sin_addr.s_addr = inet_addr("127.0.0.1");
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(5000);
// Connect to remote server
if (connect(nSocketDesc, (struct sockaddr *)&addrServer, sizeof(addrServer)) < 0)
{
puts("connect error");
return 2;
}
puts("Connected\n");
nOldFL = fcntl(0, F_GETFL, 0); // save orignal stdin status
fcntl(0, F_SETFL, (nOldFL | O_NDELAY)); // set stdin for non blocking input
puts("Enter server command (beat, time, exit)");
while (1)
{
// get server command from user
szCommand[0] = 0;
fgets(szCommand, sizeof(szCommand)-1, stdin);
if (szCommand[0] != 0)
{
replace(szCommand, '\n', 0); // strip '\n' terminator
printf("Sending %s request\n", szCommand);
if (send(nSocketDesc, szCommand, strlen(szCommand), 0) < 0)
{
puts("Send failed");
return 1;
}
}
nRecv = recv(nSocketDesc, szServerReply, sizeof(szServerReply), MSG_DONTWAIT);
if (nRecv > 0)
{
szServerReply[nRecv] = 0;
printf("Response: %s\n", szServerReply);
}
else if (nRecv == 0)
{
puts("socket connection lost");
return 0;
}
}
close(nSocketDesc);
fcntl(0, F_SETFL, nOldFL); // restore orignal state of stdin
return 0;
}