Приложение перестает отвечать на InputStream.read (); - PullRequest
0 голосов
/ 24 мая 2019

Когда код достигает InputStream.read () , приложение перестает отвечать на запросы.

Я думаю, что, возможно, это так, потому что код клиента запускается перед кодом сервера и ожидает ввода.

Вот код сервера При нажатии кнопки входа в систему значение «Отправить данные для входа» (. Отправляет данные для входа клиенту ), а если идентификатор и пароль верны, то значение становится ** "Вход в систему успешен" . Он отправляет правильное значение в ** output.readUTF ();

public void doWork(String line) {
    Connection conn = Main.getConnection();

    switch (line) {
        case "Send login details":

            Main main = new Main();
            String details = main.giveLoginDetails();
            String id = " ";
            String password = " ";
            int i = 0;
            while (details.charAt(i) != ' ') {
                id = id + details.charAt(i);
                i++;
            }

            try {
                id = id.trim();
                password = details.substring(i + 1);
                System.out.println(id + " " + password);
                output.writeUTF(id + " " + password);

            }
            catch (IOException e)
            {
                e.printStackTrace();
            }break;


        case "Login successful":


                        String getDet1 = "SELECT * FROM $t;";
                        if(su == 1)
                        getDet1 = getDet1.replace("$t", "Post1");
                        else
                         getDet1 = getDet1.replace("$t", "Post"+(su*10+1));
                        System.out.print(getDet1);
                        rs2 = stmt2.executeQuery(getDet1);
                        String d;
                        int dd;
                        for (int x = 0; x < ch; x++) {
                                rs2.next();
                                d = rs2.getString(2);
                                output.writeUTF(d);
                                System.out.println(d);
                                dd = rs2.getInt(3);
                                output.writeInt(dd);
                                System.out.println(dd);
                                d = rs2.getString(4);
                                output.writeUTF(d);
                                System.out.println(d);
                                d = rs2.getString(5);
                                // if(d == null) {
                                //   output.writeUTF("null");
                                //   System.out.println("null");
                                // }
                                // else
                                output.writeUTF(d);
                                // System.out.println(d+"not null ");}

                        }
                    }
                    catch (SQLException | IOException e) {
                        e.printStackTrace();
                    }
                    break;


            }
    }

Код клиента: - Еще одна сцена после сцены входа. Это метод Initialize интерфейса Initializable. Здесь я читаю вывод, но он зависает.

@Override
public void initialize(URL arg0, ResourceBundle arg1) {
String posts = "";
int ch = 0;
    Main m = new Main();
    Stage stage = m.getStage();
    stage.setResizable(true);

    int c = 0;

        try {
            posts = Networking.input.readUTF();
            ch = Networking.input.readInt();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        int rs = Integer.valueOf(posts);


        for(int k = 0; k<rs; k++) {
            c++;
            }
        try {
                Networking.input.readUTF();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            String det = "";
            int cl;
            for (int i = 0; i < ch; i++) {
                a[i].setDisable(false);
                a[i].setOpacity(1);
                try {
                    Networking.output.writeUTF("send voting details");

                    det = Networking.input.readUTF();
                    System.out.println(det);

                    cl = Networking.input.readInt();
                    System.out.println(cl);

                    det = Networking.input.readUTF();
                    System.out.println(det);

                    det = Networking.input.readUTF();
                    System.out.println(det);


                }
                catch (IOException exx)
                {
                    exx.printStackTrace();
                }
            }
    }

Добавить: Вот мой класс сети

package sample;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Networking {
public static ServerSocket serverSocket= null;

public static void connect(int port)
{
    try
    {
        serverSocket = new ServerSocket(port);
        System.out.print("Server is started");

        while (true)
        {
            Socket socket = null;
            try {
                socket = serverSocket.accept();
                DataInputStream input = new DataInputStream(socket.getInputStream());
                DataOutputStream output = new DataOutputStream(socket.getOutputStream());
                Thread thread = new ServerThread(socket, input, output);
                thread.start();
                System.out.print("Client Accepted");
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }

        }
    }
    catch(IOException exception)
    {
        exception.printStackTrace();
    }
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...