Я пытаюсь запустить серверный класс, затем клиенты. Я выбираю из меню первый выбор, за которым следуют 2 числа, которые я хочу добавить. Результат должен отображаться в консоли сервера. Где моя ошибка? У меня есть оба класса. Первый - это Серверы, а второй - Клиенты.
После запуска сервера, а затем клиента я получаю эту ошибку.
Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at Client.go(Client.java:20)
at Client.main(Client.java:61)
Класс сервера
enum states
{
eReceiveCommand,
eSendResult,
eCloseSocket
}
public class Server {
double result = 0;
states currentState = states.eReceiveCommand;
private void go() throws IOException, InterruptedException {
ServerSocket serverSocket = new ServerSocket(8080);
while(!serverSocket.isClosed())
{
Socket socket = serverSocket.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String advice = reader.readLine();
String operation[] = advice.split(" ");
if(states.eReceiveCommand == currentState)
{
switch(operation[0])
{
case "1":
result = Double.parseDouble(operation[1]) + Double.parseDouble(operation[2]);
break;
case "2":
result = Double.parseDouble(operation[1]) - Double.parseDouble(operation[2]);
break;
case "3":
result = Double.parseDouble(operation[1]) * Double.parseDouble(operation[2]);
break;
case "4":
result = Double.parseDouble(operation[1]) / Double.parseDouble(operation[2]);
break;
}
serverSocket.close();
currentState = states.eSendResult;
}
else if(states.eSendResult == currentState)
{
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.write(String.valueOf(result));
writer.write(String.valueOf(result));
writer.write(String.valueOf(result));
currentState = states.eReceiveCommand;
}
//socket.close();
}
}
public static void main(String[] args) throws IOException, InterruptedException {
Server server = new Server();
server.go();
}
}
Теперь это клиентский класс
enum states
{
eSendCommand,
eSendResult,
eCloseSocket
}
public class Client {
states currentState = states.eSendCommand;
public void go() throws IOException {
Socket socket = new Socket("localhost", 8080);
while(!socket.isClosed())
{
String optiune;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer = new PrintWriter(socket.getOutputStream());
switch(currentState)
{
case eSendCommand:
System.out.println("-----MENIU-----");
System.out.println("1) ADAUGARE");
System.out.println("2) SCADERE");
System.out.println("3) INMULTIRE");
System.out.println("4) IMPARTIRE");
System.out.println("5) TERMINARE CONEXIUNE");
System.out.println("");
optiune = reader.readLine();
currentState = states.eSendResult;
writer.write(optiune);
writer.close();
break;
case eSendResult:
optiune = reader.readLine();
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String result =socketReader.readLine();
System.out.println("Result = " + result);
currentState = states.eSendCommand;
break;
}
}
}
public static void main(String[] args) throws IOException {
Client client = new Client();
while(true)
client.go();
}
}