-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClientTCP.java
More file actions
127 lines (107 loc) · 3.6 KB
/
Copy pathClientTCP.java
File metadata and controls
127 lines (107 loc) · 3.6 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.*;
import java.util.*;
// client class
public class Client {
public static void main (String[] args) {
String hostAddress;
Socket tcpServer;
BufferedReader in;
PrintStream out;
InetAddress i;
int tcpPort;
int maxlen = 128;
int timeoutValue = 100;
String my_name = "client1";
Scanner keyb = new Scanner(System.in);
ArrayList<InetSocketAddress> servers = new ArrayList<InetSocketAddress>();
// read in servers list
int numServers = 1;//Integer.parseInt(keyb.next());
// for(int x = 0; x < numServers; x++){
String val[] = "127.0.0.1:7050".split(":");
servers.add(new InetSocketAddress(val[0], Integer.parseInt(val[1])));
//}
//keyb.nextLine();
// which server to try to connect to
int current_server = 0;
try{
i = servers.get(current_server).getAddress();
tcpPort = servers.get(current_server).getPort();
while(keyb.hasNextLine()) {
try{
String cmd = keyb.nextLine() + " " + my_name;
// System.out.println(cmd);
if(cmd.length() == 0)
continue;
String[] tokens = cmd.split(" ");
byte[] buf = cmd.getBytes();
if (tokens[0].equals("purchase")) {
} else if (tokens[0].equals("cancel")) {
} else if (tokens[0].equals("search")) {
} else if (tokens[0].equals("list")) {
} else {
System.out.println("ERROR: No such command");
continue;
}
boolean timeout = true;
// try again on another server if timeout
while(timeout){
try{
tcpServer = new Socket(i, tcpPort);
tcpServer.setSoTimeout(timeoutValue);
in = new BufferedReader(new InputStreamReader(tcpServer.getInputStream()));
out = new PrintStream(tcpServer.getOutputStream());
long startTime = System.nanoTime();
out.println(cmd);
out.flush();
System.out.println("Server Response:");
String response = in.readLine();
while(response != null){
System.out.println(response);
response = in.readLine();
}
long stopTime = System.nanoTime();
System.out.println((stopTime - startTime) / 1000000 + " ms");
timeout = false;
}
// for exceptions, switch servers
catch(SocketTimeoutException e){
while(current_server == 0){}
current_server++;
if(current_server == servers.size()){
System.out.println("Server Timeout, switching servers");
System.out.println("All Servers Down");
return;
}
i = servers.get(current_server).getAddress();
tcpPort = servers.get(current_server).getPort();
System.out.println("Server Timeout, switching servers");
}
catch(ConnectException e){
current_server++;
if(current_server == servers.size()){
System.out.println("Server Crashed, switching servers");
System.out.println("All Servers Down");
return;
}
i = servers.get(current_server).getAddress();
tcpPort = servers.get(current_server).getPort();
System.out.println("Server Crashed, switching servers");
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
}