В настоящее время у меня проблема с поддержанием соединения (я чувствую, что это неправильно сформулировано как «поддержание соединения») между моим клиентом и сервером (не соединение, а скорее использование того же метода). Вот мой код: (я объясню проблему больше после нее)
Клиент:
try{
Scanner scan = new Scanner(System.in);
System.out.print("Type *R for registration, " );
String line = scan.nextLine();
int port = 13333;
Socket mySock = new Socket("127.0.0.1", port);
Scanner in = new Scanner(
new InputStreamReader(mySock.getInputStream()));
PrintStream out = new PrintStream( mySock.getOutputStream());
out.println(line);
while(in.hasNextLine()){
System.out.println(in.nextLine());
String s = scan.nextLine();
out.println(s);
}
mySock.close();
}catch (Exception e){
e.printStackTrace();
}
Сервер:
public static void main(String[] args) throws Exception {
int port = 13333;
ServerSocket socket = new ServerSocket(port);
while(true){
Socket connection = socket.accept();
User request = new User(connection);
Thread thread = new Thread(request);
thread.start();
}
Serverhelper (класс пользователя):
final class User implements Runnable {
private static FileWriter fw;
private static boolean flag = false;
private Socket socket;
public User (Socket socket) throws Exception{
this.socket = socket;
}
private Scanner scan;
private PrintStream out;
public void run() {
try{
UserInput();
}catch (Exception e){
System.out.println(e);
}
}
private void UserInput() throws Exception{
scan = new Scanner(
new InputStreamReader(socket.getInputStream()));
out = new PrintStream(socket.getOutputStream());
String input = scan.next();
if(input.equals("*R")){
Register();
}
}
private void Register() throws FileNotFoundException{
try{
scan = new Scanner(new InputStreamReader(socket.getInputStream()));
out = new PrintStream(socket.getOutputStream());
fw = new FileWriter("info.txt",true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter txtfile = new PrintWriter(bw);
//Scanner scan = new Scanner(System.in);
out.println("Enter a username: ");
String username = scan.nextLine();
out.println("Enter a password: ");
String password = scan.nextLine();
txtfile.println(username + " " + password);
txtfile.flush();
txtfile.close();
}catch(IOException e){
e.printStackTrace();
}
}
** Вот что происходит. Сначала я запускаю свой сервер, затем запускаю клиент и ввожу * R в консоль, которая затем возвращает строку «Введите имя пользователя:». Таким образом, мой сервер и клиент работают, однако после этого я теряюсь, потому что затем я продолжаю вводить имя пользователя для отправки на сервер. Это не воспринимается моим методом userInput в пользовательском классе, потому что он сканирует только * R, и я не остаюсь в своем методе register в пользовательском классе. Есть ли способ сохранить мою позицию (остаться в методе регистрации)? Это было бы идеально, но я потерян.