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