Сервер не получает запрос от клиента - PullRequest
0 голосов
/ 18 октября 2019

Я работаю над приложением для аутентификации по паролю. Для тестирования я хотел отправить образец идентификатора с клавиатуры на сервер, на который сервер подтвердит его получение. Однако когда я отправляю запрос, сервер не отвечает. Где ошибка?

public class Client {
public static void main(String args[]) {
    Scanner scanner = new Scanner(System.in);
    try {
        Socket skt = new Socket("localhost", 2011);
        BufferedReader br = new BufferedReader(
                new InputStreamReader(skt.getInputStream()));
        System.out.print("Received: " + br.readLine());
        PrintWriter pw =
                new PrintWriter(skt.getOutputStream(), true);
        int key_in=scanner.nextInt();
        System.out.println("Sent: " +key_in);
        pw.print(key_in);
        pw.close();
        br.close();
    }
    catch(Exception e) {
        System.out.print("Error");
    }
 }
}

public class Server {
public static void main(String args[]) {
    String input = "Enter ID";
    ArrayList<String> passwords = new ArrayList<String>();
    passwords.add("password1");
    passwords.add("password2");
    passwords.add("password3");
    try {
        ServerSocket srvr = new ServerSocket(2011);
        System.out.println("Server running...");
        Socket skt = srvr.accept();
        System.out.println("Client connected");
        PrintWriter pw =
                new PrintWriter(skt.getOutputStream(), true);
        System.out.println("Sent: " + input);
        BufferedReader br = new BufferedReader(
                new InputStreamReader(skt.getInputStream()));
        System.out.println("Received:" + br.readLine());
        pw.print(input);
        pw.close();
        br.close();
        skt.close();
        srvr.close();
    }
    catch(Exception e) {
        System.out.println("Error");
    }
 }
}

1 Ответ

0 голосов
/ 18 октября 2019

Я сделал несколько изменений в вашем коде, если вы не возражаете. Главное изменение в том, что лучше использовать DataInputStream/DataOutputStream. Я не знаю, где проблема с PrintWriter, но одна из проблем есть, и я не уверен, где. Если хочешь - ты свободен это выяснить. Вторая проблема заключается в том, что вы печатаете, что вы что-то написали в Socket, но на самом деле это не так:

System.out.println("Sent: " + input); // input actually wasn't sent 
System.out.println("Received:" + br.readLine()); // read to answer even though input wasn't sent yet
pw.print(input); // actual sending of the input

Вы пытаетесь прочитать значение перед фактической отправкой клиенту ввода.

public class Server {
    public static void main(String[] args) {
        String input = "Enter ID";
        ArrayList<String> passwords = new ArrayList<>();
        passwords.add("password1");
        passwords.add("password2");
        passwords.add("password3");
        try {
            ServerSocket srvr = new ServerSocket(2011);
            System.out.println("Server running...");
            Socket skt = srvr.accept();
            System.out.println("Client connected");

            DataOutputStream pw = new DataOutputStream(skt.getOutputStream());
            DataInputStream br = new DataInputStream(skt.getInputStream());

            System.out.println("Sent: " + input);
            pw.writeUTF(input);
            pw.flush();

            System.out.println("Received:" + br.readUTF());

            pw.close();
            br.close();
            skt.close();
            srvr.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
}


public class Client {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        try {
            Socket skt = new Socket("localhost", 2011);
            DataInputStream br = new DataInputStream(skt.getInputStream());
            DataOutputStream pw = new DataOutputStream(skt.getOutputStream());
            System.out.print("Received: " + br.readUTF());
            int key_in=scanner.nextInt();
            System.out.println("Sent: " +key_in);
            pw.writeInt(key_in);
            pw.close();
            br.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
}

Надеюсь, это поможет вам, и вы будете использовать мои изменения, чтобы найти ошибки в вашем коде.

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