Java-сокеты и поддержание постоянного соединения - PullRequest
0 голосов
/ 02 мая 2018

В настоящее время у меня проблема с поддержанием соединения (я чувствую, что это неправильно сформулировано как «поддержание соединения») между моим клиентом и сервером (не соединение, а скорее использование того же метода). Вот мой код: (я объясню проблему больше после нее)

Клиент:

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 в пользовательском классе. Есть ли способ сохранить мою позицию (остаться в методе регистрации)? Это было бы идеально, но я потерян.

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