2013-12-17 5 views
1

привет всем, что я хочу сделать java сокет разговора между сервером и клиентом, он работает с первым сообщением, а затем останавливается разговор, в моем случае я хочу отправить привет сообщение от клиента и получить привет сообщение с сервера то сервер должен также послать другой массаж «ввести номер, чтобы проверить» и ждать вводаjava socket programming разговор

мой клиентский код:

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; 
    } 
} 

Может ли кто-нибудь помочь?

ответ

2

У вас было несколько ошибок, и реализация не была закончена.
Ваш код исправлен. Также обратите внимание, что 1 не является простым числом AFAIK.
Разговор заканчивается, когда клиент отправляет «bye» вместо номера.

Сервер:

 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); 
       } 
      } 
     } 
    }