-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbankClient.c
114 lines (95 loc) · 3.1 KB
/
bankClient.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
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "banking.h"
#include <stdlib.h> //@modified mafravi on 05-09 T
#include <unistd.h> //@modified mafravi on 05-09 T
int setupTCPClient(char *servIPAddr, unsigned int portNum) {
int clientSocket;
struct sockaddr_in servAddr;
/* Setup address of server */
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(servIPAddr);
servAddr.sin_port = htons(portNum);
/* Create socket */
if( (clientSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
printf("Failed to create socket; Error %d: %s\n", errno, strerror(errno));
return -1;
}
/* Connect socket to server */
if(connect(clientSocket,(struct sockaddr *) &servAddr,sizeof(servAddr)) < 0) {
printf("Failed to connect socket to %s:%d; Error %d: %s\n", servIPAddr, portNum, errno, strerror(errno));
return -1;
}
return clientSocket;
}
int main(int argc, char **argv) {
int mySocket;
char serverIP[15];
unsigned int portNum,trans,accnum,value;
if(argc != 6) {
printf("Usage: bankClient servIPAddr servPortNum command acctNum value\n");
return -1;
}
/* Setup the IP address */
strcpy(serverIP, argv[1]);
/* Setup TCP port number */
portNum = atoi(argv[2]);
/* Setup the client socket */
if((mySocket = setupTCPClient(serverIP, portNum)) < 0) {
return -1;
}
/* @modified mafravi on 05-09 T */
/* mySocket was created successfully, so send/receive with it */
if ( argc==6 ) {
/*
//get the transaction type
switch ( (char) argv[3][0] ) {
case 'B':
toSend->trans = BANK_TRANS_INQUIRY; //balance inquiry
break;
case 'W':
toSend->trans = BANK_TRANS_WITHDRAW; //withdrawal
break;
case 'D':
toSend->trans = BANK_TRANS_DEPOSIT; //deposit
break;
}*/
//get the transaction type
if ( strcmp(argv[3],"I")==0 ){
trans = BANK_TRANS_INQUIRY; //balance inquiry
}
else if ( strcmp(argv[3],"W")==0 ){
trans = BANK_TRANS_WITHDRAW; //withdrawal
}
else if ( strcmp(argv[3],"D")==0 ){
trans = BANK_TRANS_DEPOSIT; //deposit
}
//get the account number and value
accnum = atoi(argv[4]);
value = atoi(argv[5]);
sBANK_PROTOCOL toSend = {trans,accnum,value};
printf("Transaction: %d\nAccount Number: %d\nAmount: %d\n",trans,accnum,value);
sBANK_PROTOCOL rec;
//send and receive the data
if ( send(mySocket,(void *)&toSend,sizeof(toSend),0)<0 ){
puts("not sent");
return -1;
} else printf("sent\n");
if ( recv(mySocket,&rec,sizeof(sBANK_PROTOCOL),0)<0 ){
puts("not received");
return -1;
} else puts("received");
//char s[15];
//sprintf(s,"%d\n\n",rec);
//received w/out error so parse the return message
//sBANK_PROTOCOL *got = (struct sBANK_PROTOCOL *) rec;
printf("Transaction: %d\nAccount Number: %d\nAmount: %d\n",rec.trans,rec.acctnum,rec.value);
//printf("Transaction: %u\nAccount Number: %u\nAmount: %u\n",got->trans,got->acctnum,got->value);
}
close(mySocket);
return 0;
}