-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathATMClient.java
More file actions
103 lines (83 loc) · 3.97 KB
/
ATMClient.java
File metadata and controls
103 lines (83 loc) · 3.97 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
import java.io.*;
import java.net.*;
public class ATMClient {
private static final String DEFAULT_HOST = "127.0.0.1";
private static final int DEFAULT_PORT = 2525;
public static void main(String[] args) {
String serverHost = DEFAULT_HOST;
int serverPort = DEFAULT_PORT;
if (args.length >= 1) {
serverHost = args[0];
}
if (args.length >= 2) {
try {
serverPort = Integer.parseInt(args[1]);
if (serverPort < 1024 || serverPort > 65535) {
System.err.println("Port range 1024-65535, using default " + DEFAULT_PORT);
serverPort = DEFAULT_PORT;
}
} catch (NumberFormatException e) {
System.err.println("Invalid port, using default " + DEFAULT_PORT);
}
}
System.out.println("Connecting to " + serverHost + ":" + serverPort);
try (Socket socket = new Socket(serverHost, serverPort);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader console = new BufferedReader(new InputStreamReader(System.in))) {
System.out.println("Connected to ATM Server");
System.out.println("========== ATM System ==========");
System.out.print("Enter card number: ");
String cardNo = console.readLine();
out.println("HELO " + cardNo);
String response = in.readLine();
System.out.println("Server: " + response);
if (!response.startsWith("500")) {
System.out.println("Auth failed, exit");
return;
}
System.out.print("Enter password: ");
String passwd = console.readLine();
out.println("PASS " + passwd);
response = in.readLine();
System.out.println("Server: " + response);
if (!"525 OK!".equals(response)) {
System.out.println("Wrong password, exit");
return;
}
System.out.println("Login success!");
System.out.println("========================================");
while (true) {
System.out.println("\nChoose operation:");
System.out.println(" 1. Check balance (BALA)");
System.out.println(" 2. Withdraw (WDRA <amount>)");
System.out.println(" 3. Quit (QUIT)");
System.out.print("> ");
String input = console.readLine();
if (input == null) break;
out.println(input);
String resp = in.readLine();
if (resp == null) break;
if (resp.startsWith("AMNT:")) {
System.out.println("Balance: " + resp.substring(5) + " yuan");
} else if ("525 OK!".equals(resp)) {
System.out.println("Success!");
} else if ("401 ERROR!".equals(resp)) {
System.out.println("Failed! Please check input or balance.");
} else if ("BYE".equals(resp)) {
System.out.println("Session ended, thank you!");
break;
} else {
System.out.println("Server response: " + resp);
}
if ("QUIT".equalsIgnoreCase(input.trim())) {
break;
}
}
System.out.println("========== Goodbye! ==========");
} catch (IOException e) {
System.err.println("Connection failed: " + e.getMessage());
System.out.println("Make sure server is running");
}
}
}