import java.io.*;
import java.net.*;
class ATMClient {
private static final String SERVER_ADDRESS
= "127.0.0.1"; private static final int SERVER_PORT = 5000;
public static void main
(String[] args
) { try (Socket socket
= new Socket(SERVER_ADDRESS, SERVER_PORT
);
System.
out.
print(in.
readLine()); // "Enter card number: " String cardNumber
= userInput.
readLine(); out.println(cardNumber);
System.
out.
print(in.
readLine()); // "Enter PIN: " String pin
= userInput.
readLine(); out.println(pin);
String response
= in.
readLine();
if (response.startsWith("Welcome")) {
boolean exit = false;
while (!exit) {
System.
out.
println(in.
readLine()); // Display options String choice
= userInput.
readLine(); out.println(choice);
if ("1".equals(choice)) {
System.
out.
print(in.
readLine()); // "Enter amount to withdraw: " String amount
= userInput.
readLine(); out.println(amount);
System.
out.
println(in.
readLine()); // Withdrawal response } else if ("2".equals(choice)) {
System.
out.
println(in.
readLine()); // "Thank you for using..." exit = true;
} else {
System.
out.
println(in.
readLine()); // Invalid choice message }
}
} else {
System.
out.
println("Invalid card number or PIN. Connection closing."); }
System.
err.
println("Client error: " + e.
getMessage()); }
}
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEubmV0Lio7CgpjbGFzcyBBVE1DbGllbnQgewogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZFUl9BRERSRVNTID0gIjEyNy4wLjAuMSI7CiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSX1BPUlQgPSA1MDAwOwoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICB0cnkgKFNvY2tldCBzb2NrZXQgPSBuZXcgU29ja2V0KFNFUlZFUl9BRERSRVNTLCBTRVJWRVJfUE9SVCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciB1c2VySW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHNvY2tldC5nZXRJbnB1dFN0cmVhbSgpKSk7CiAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSBuZXcgUHJpbnRXcml0ZXIoc29ja2V0LmdldE91dHB1dFN0cmVhbSgpLCB0cnVlKSkgewoKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChpbi5yZWFkTGluZSgpKTsgIC8vICJFbnRlciBjYXJkIG51bWJlcjogIgogICAgICAgICAgICBTdHJpbmcgY2FyZE51bWJlciA9IHVzZXJJbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICBvdXQucHJpbnRsbihjYXJkTnVtYmVyKTsKCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoaW4ucmVhZExpbmUoKSk7ICAvLyAiRW50ZXIgUElOOiAiCiAgICAgICAgICAgIFN0cmluZyBwaW4gPSB1c2VySW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgb3V0LnByaW50bG4ocGluKTsKCiAgICAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IGluLnJlYWRMaW5lKCk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXNwb25zZSk7CgogICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhcnRzV2l0aCgiV2VsY29tZSIpKSB7CiAgICAgICAgICAgICAgICBib29sZWFuIGV4aXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHdoaWxlICghZXhpdCkgewogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbi5yZWFkTGluZSgpKTsgIC8vIERpc3BsYXkgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgIFN0cmluZyBjaG9pY2UgPSB1c2VySW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihjaG9pY2UpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoIjEiLmVxdWFscyhjaG9pY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoaW4ucmVhZExpbmUoKSk7ICAvLyAiRW50ZXIgYW1vdW50IHRvIHdpdGhkcmF3OiAiCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhbW91bnQgPSB1c2VySW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oYW1vdW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGluLnJlYWRMaW5lKCkpOyAgLy8gV2l0aGRyYXdhbCByZXNwb25zZQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIjIiLmVxdWFscyhjaG9pY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbi5yZWFkTGluZSgpKTsgIC8vICJUaGFuayB5b3UgZm9yIHVzaW5nLi4uIgogICAgICAgICAgICAgICAgICAgICAgICBleGl0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW4ucmVhZExpbmUoKSk7ICAvLyBJbnZhbGlkIGNob2ljZSBtZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZhbGlkIGNhcmQgbnVtYmVyIG9yIFBJTi4gQ29ubmVjdGlvbiBjbG9zaW5nLiIpOwogICAgICAgICAgICB9CgogICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDbGllbnQgZXJyb3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgfQp9