簡體   English   中英

Java套接字編程對話

[英]java socket programming conversation

大家好,我想在服務器和客戶端之間進行java套接字對話,它與第一個消息一起工作,然后對話停止,就我而言,我想從客戶端發送hi消息並從服務器接收hi消息,那么服務器還必須發送另一個按摩“輸入數字以檢查”並等待輸入

我的客戶代碼是:

public class ClientSide {
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception{
        ClientSide clientSideInstance = new ClientSide();
        clientSideInstance.run();
    }

    /**
     * @throws Exception
     */
    public void run() throws Exception{

        Socket soc = new Socket("localhost",4321);
        PrintStream printStream = new PrintStream(soc.getOutputStream());
        printStream.println("hi");
        InputStreamReader Inputreader = new InputStreamReader(soc.getInputStream());
        BufferedReader bufferedReader = new BufferedReader(Inputreader);
        String receivedMsg =  bufferedReader.readLine();
        System.out.println(receivedMsg);
    }
}

我的服務器代碼是:

public class ServerSide {
    private PrintStream printStream;

    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception{
        ServerSide serverSideInstance = new ServerSide();
        serverSideInstance.run();
    }

    /**
     * @throws Exception
     */
    public void run() throws Exception{

        ServerSocket socket = new ServerSocket(4321);
        Socket soc = socket.accept();
        InputStreamReader Inputreader = new InputStreamReader(soc.getInputStream());
        BufferedReader bufferedReader = new BufferedReader(Inputreader);

        String receivedMsg =  bufferedReader.readLine();
        System.out.println(receivedMsg);

        // parsing client massage 
        if(receivedMsg.trim().equalsIgnoreCase("hi")){

            printStream = new PrintStream(soc.getOutputStream());
            printStream.println("hi");

            printStream.println("enter number to check ");

            InputStreamReader InputreaderForPrimeNumber = new InputStreamReader(soc.getInputStream());
            BufferedReader bufferedReaderForPrimeNumber = new BufferedReader(InputreaderForPrimeNumber);
            String number = bufferedReaderForPrimeNumber.readLine();

            if(isPrime(Integer.parseInt(number))){
                printStream.println("yes - it is Prime number :)");
            }else{
                printStream.println("No - it is not a Prime number :(");
            }

        }
    }

    private boolean isPrime(int n) {
        for(int i=2;i<n;i++) {
            if(n%i==0)
                return false;
        }
        return true;
    }
}

任何人都可以提供幫助嗎?

您有一些錯誤,並且實現的確沒有完成。
這是您的固定代碼。 另外,請注意1不是素數AFAIK。
當客戶端發送“再見”而不是數字時,對話結束。

服務器:

        import java.io.BufferedReader;
        import java.io.InputStreamReader;
        import java.io.PrintStream;
        import java.net.ServerSocket;
        import java.net.Socket;

        public class ServerSide {
            private PrintStream printStream;

            /**
             * @param args
             * @throws Exception
             */
            public static void main(String[] args) throws Exception{
                ServerSide serverSideInstance = new ServerSide();
                serverSideInstance.run();
            }

            /**
             * @throws Exception
             */
            public void run() throws Exception{

                ServerSocket socket = new ServerSocket(4321);
                Socket soc = socket.accept();
                InputStreamReader Inputreader = new InputStreamReader(soc.getInputStream());
                BufferedReader bufferedReader = new BufferedReader(Inputreader);

                printStream = new PrintStream(soc.getOutputStream());

                while (true){
                    String receivedMsg =  bufferedReader.readLine();
                    System.out.println(receivedMsg);

                    // parsing client massage 
                    if(receivedMsg.trim().equalsIgnoreCase("hi")){
                        printStream.println("hi");
                        printStream.println("enter number to check: ");
                    }else if (receivedMsg.trim().equalsIgnoreCase("bye")){
                        // printStream.println("bye");
                        break;
                    }else{
                        if(isPrime(Integer.parseInt(receivedMsg))){
                            printStream.println("Yes - it is a prime number :)");
                        }else{
                            printStream.println("No - it is not a prime number :(");
                        }
                        printStream.println("enter number to check: ");
                    }
                }
            }

            private boolean isPrime(int n) {
                if (n==1) return false;

                for(int i=2;i<n;i++) {
                    if(n%i==0){
                        return false;
                    }
                }
                return true;
            }

        }



客戶:

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.Socket;

    public class ClientSide {
        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception{
            ClientSide clientSideInstance = new ClientSide();
            clientSideInstance.run();
        }

        /**
         * @throws Exception
         */
        public void run() throws Exception{
            BufferedReader brr = new BufferedReader(new InputStreamReader(System.in));
            Socket soc = new Socket("localhost", 4321);
            PrintStream printStream = new PrintStream(soc.getOutputStream());
            printStream.println("hi");

            InputStreamReader Inputreader = new InputStreamReader(soc.getInputStream());
            BufferedReader bufferedReader = new BufferedReader(Inputreader);
            String receivedMsg =  bufferedReader.readLine().trim();
            System.out.println(receivedMsg);

            while (true){
                receivedMsg =  bufferedReader.readLine();
                System.out.println(receivedMsg);

                if (receivedMsg.equalsIgnoreCase("enter number to check: ")){
                    String userMessage = brr.readLine().trim(); // read from stdin
                    printStream.println(userMessage); // send message/number to server
                    if (userMessage.equalsIgnoreCase("bye")){
                        break;
                    }
                    receivedMsg =  bufferedReader.readLine().trim();
                    System.out.println(receivedMsg);
                }
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM