Как сделать так, чтобы программа показывала результат двух чисел, указанных в качестве входных данных в консоли сервера? - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь запустить серверный класс, затем клиенты. Я выбираю из меню первый выбор, за которым следуют 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();
    }
}
...