-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclientB.c
129 lines (115 loc) · 3.83 KB
/
clientB.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
int init_socket(char * port_number);
int send_msg(int my_socket_disc,char * msg, int message_size);
int transaction(int my_socket_disc,char * msg);
void recv_msg_clients(int my_socket_disc);
int containsKill(char *msg);
int msgIsEmpty(char * msg);
#include "clientB.h"
#include "socketHelper.h"
int main(int argc, char * argv[]){
//USCID:9281603623
//udp port: 21623
//TCP client A 25623
//TCP client B 26623
int input_argument=0;
char port_number[]= "26623";
printf("The client B us up and running.\n");
int my_socket_disc=init_socket(port_number);
char msg[200];
//printig public message
input_argument = argc-1;
switch ( input_argument ){
case 1: ;
if(containsTXLIST(argv[1])){
//perform txList task
printf("Sent a sorted list request to the main server.\n");
memset(msg,'\0',sizeof(msg));
strncat(msg,argv[1],strlen(argv[1]));
send_msg(my_socket_disc,msg,strlen(msg));
}
else{
//checkwallet
printf("%s sent a balance enquiry request to the main server.\n",argv[1]);
memset(msg,'\0',sizeof(msg));
strncat(msg,argv[1],strlen(argv[1]));
char check_wallet_str[]=" WALLET";//space needed for dlimeter parsing
strncat(msg,check_wallet_str,strlen(check_wallet_str)+1);
send_msg(my_socket_disc,msg,strlen(msg));
}
break;
case 3: //transaction
printf("%s has requested to transfer %s coins to %s.\n",argv[1],argv[2],argv[3]);
memset(msg,'\0',sizeof(msg));
for(int ii=1;ii<=input_argument; ii++){
if(ii !=1){
strncat(msg," ",1); //create spaces for each except for the first time
}
strncat(msg,argv[ii],strlen(argv[ii]));
}
send_msg(my_socket_disc,msg,strlen(msg));
break;
default:
{
printf("There was either too many or too little input arguemnts\n");
break;
}
}
return 0;
}
int init_socket(char *port_num){
struct addrinfo hints, *res;
memset(&hints,0,sizeof(hints));
hints.ai_family = PF_INET;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo("localhost",port_num,&hints,&res);
int mySockDesc = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if(mySockDesc <0){
printf("could not create socket\n");
return -1;
}
//int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
int myConnection = connect(mySockDesc,res->ai_addr,res->ai_addrlen);
if (myConnection <0){
printf("could not establish a connection\n");
return -1;
}
return mySockDesc;
}
int send_msg(int my_socket_disc,char * msg,int message_size){
int mySend= send(my_socket_disc, msg,message_size,0);
if( mySend <0){
printf("could not send data.\n");
}else{
recv_msg_clients(my_socket_disc);
}
close(my_socket_disc);
return 0;
}
void recv_msg_clients(int my_socket_disc){
int kill_command=0;
char msg_from_server[500];
while(!kill_command){
memset(msg_from_server,'\0',sizeof(msg_from_server));
recv(my_socket_disc, msg_from_server,sizeof(msg_from_server),0);
if(!containsKill(msg_from_server) || msgIsEmpty(msg_from_server)){
if(!msgIsEmpty(msg_from_server)){
printf("%s\n",msg_from_server);
}
}else{
kill_command=1;
}
}
}
int msgIsEmpty(char * msg){
if(strlen(msg) ==0){
return 1;
}
return 0;
}
int containsKill(char *msg){
char killMsg[]="KILL";
if (strstr(killMsg,msg)){
return 1;
}
return 0;
}