Простая клиентская / серверная программа TCP в Java

Aloha спросил: 03 февраля 2018 в 12:46 в: java

Привет, у меня небольшая проблема с моей программой, которая является простым клиентом / сервером. Клиент отправляет содержимое текстового файла на сервер. Текстовый файл представляет собой просто ints, а затем сервер должен отправить обратно наибольшее простое число меньше, чем каждый int в текстовом файле (если его простое просто отправить обратно простое число и ничего не делать). Так, например, скажем, текстовый файл равен 5 15 28. Результат после запуска программы должен быть 5 13 23.

Вот мой код для клиентской стороны:

public class TCPClient {        public static void main(String[] args) throws Exception{
            try{ 
                Socket mySock = new Socket("127.0.0.1", 12001);
                BufferedReader in = new BufferedReader(
                        new InputStreamReader(mySock.getInputStream()));
                PrintStream out = new PrintStream( mySock.getOutputStream());
                Scanner scan = new Scanner(new File(args[0]));
                String msg = scan.nextLine();
                out.println(msg);
                System.out.println(in.readLine());
                mySock.close();            }catch (Exception e){
            }
        }
    }

Вот мой код для серверной части:

public class TCPServer {
    public static void main(String[] args) throws Exception {
        try{
            ServerSocket mySock = new ServerSocket(12001);
            Socket client = mySock.accept();
            BufferedReader in = new BufferedReader(
                    new InputStreamReader(client.getInputStream()));
            PrintStream out = new PrintStream( client.getOutputStream());            String[] arr = in.readLine().split(" ");
            int[] intarr = new int[arr.length];            for(int i = 0; i <arr.length; i++){
             intarr[i] = Integer.parseInt(arr[i]);
             if (prim(intarr[i]) == true){
                 out.println(intarr[i]);                }else{                    while (!prim(--intarr[i])){                    }                    out.println(intarr[i]);
                }            }                       client.close();
            mySock.close();        }catch (Exception e){        }
    }    public static boolean prim(int m){
        int n=m;
        for(int i=2;i<n;i++){
            if(n%i == 0){
                return false;
            }        }   
        return true;
    }}

Когда я запускаю эту программу, мой вывод - это только первое число в текстовом файле. Так что, если мой текстовый файл равен 1 3 5. Мой результат равен 1. Однако мой алгоритм, по крайней мере, работает, потому что, если мой текстовый файл 8, например, моя программа вернет 7. Кто-нибудь знает, почему это происходит?

0 ответов