2017-09-30 4 views
0

J'essaye d'écrire un programme Java simple et basique où un client envoie une chaîne au serveur et le serveur est supposé répondre avec une chaîne inversée. Je suis sûr que j'ai la structure et le flux de programme corrects mais mon serveur n'est pas lu la chaîne de mon client. J'ai réduit le problème à cette ligne sur le côté serveur: string = inputStream.readLine(); Voici mon code. Quel pourrait être le problème?Communication client-serveur en Java en utilisant des sockets

Server1.java

import java.io.*; 
import java.net.*; 

class Server1 { 

    public static void main(String[] args) throws Exception { 
     String string = null; 

     ServerSocket myServerSocket = new ServerSocket(4000); //Create Socket 
     System.out.println("Server Running..."); 

     Socket clientSocket = myServerSocket.accept(); 

     DataInputStream inputStream = new DataInputStream(clientSocket.getInputStream()); 
     PrintStream outputStream = new PrintStream(clientSocket.getOutputStream()); 


     do { 
      string = inputStream.readLine(); 


      if(string!=null){   

      //using StringBuilder method to reverse string 
      StringBuilder input = new StringBuilder(); 

      // append a string into StringBuilder input1 
      input.append(input); 

      // reverse StringBuilder input1 
      input = input.reverse(); 

      // print reversed String 
      for (int i = 0; i < input.length(); i++) { 
       outputStream.println(input.charAt(i)); 
      } 
      } 

     } while (true); 

     /*outputStream.println("exit"); 
     outputStream.close(); 
     inputStream.close(); 
     myServerSocket.close(); 
     System.out.println("Server Closed!");*/ 
    } 
} 

Client1.java

import java.io.*; 
import java.net.*; 

import java.util.Scanner; 

class Client1 { 

    public static void main(String[] args) throws Exception { 
     Scanner sc = new Scanner(System.in); //Object to read keyboard input 
     String string = null, response = null; //Variable to store string 

     Socket mySocket = new Socket("127.0.0.1", 4000); //Create Socket 

     DataOutputStream outputStream = new DataOutputStream(mySocket.getOutputStream()); 
     DataInputStream inputStream = new DataInputStream(mySocket.getInputStream()); 

     System.out.println("Client Running..."); 

     do { 
      System.out.println("Type in a string and Press Enter..."); 
      string = sc.next(); 
      outputStream.writeBytes(string); 
      response = inputStream.readLine(); 
      if (response != null) { 
       System.out.println("Server Response: " + response); 
      } 

     } while (true); 

    } 
} 
+0

N'a pas essayé le code, mais '' 'Scanner.next''' met pas de saut de ligne à la fin de la chaîne, et donc le serveur va attendre un saut de ligne indéfiniment. Si le reste du code est correct, envoyez juste une combinaison de '' '\ n''' et/ou' '' \ '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Note latérale: '' 'Scanner.next''' fournit un jeton,' '' Scanner.nextLine''' fournirait une ligne entière (toujours sans saut de ligne). Side note 2: pour un fonctionnement plus rapide, vous pouvez vouloir '' '' flush''' flux de sortie après l'écriture. – tevemadar

Répondre

0

Le problème est que dans cette chaîne de ligne = inputStream.readLine(); il est à la recherche d'une ligne et si vous ajoutez wont « \ r \ n » à la fin de votre massage, il continuera de chercher les lignes se terminent

0

Je suis en train d'écrire un programme Java simple et basique où un client envoie une chaîne au serveur et le serveur est censé répondre avec une chaîne inversée . Je suis sûr que j'ai la bonne structure de programme et flux mais mon serveur ne lit pas la chaîne de mon client. J'ai réduit le problème à cette ligne sur le côté serveur: string = inputStream.readLine(); Voici mon code. Quel pourrait être le problème?

Ici, je peux voir une erreur de copie de pâte. boucle

// append a string into StringBuilder input1 
      input.append(input); 

Toujours utiliser while (true) pour lire un message du client, Essayez ci-dessous les codes que pour votre question.

Server1.java

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

    public class Server1 { 

      private static Socket socket; 

      public static void main(String[] args) { 
       try { 
        ServerSocket serverSocket = new ServerSocket(4000); 
        System.out.println("Server Running..."); 

        //Note: Server is running always. This is done using this while(true) loop 
        while (true) { 
         //Reading the message from the client 
         socket = serverSocket.accept(); 
         InputStream is = socket.getInputStream(); 
         InputStreamReader isr = new InputStreamReader(is); 
         BufferedReader br = new BufferedReader(isr); 
         String string = br.readLine(); 
         System.out.println("Message received from client is " + string); 
         //Reverse string responce builder 
         try { 
          //using StringBuilder method to reverse string 
          StringBuilder input = new StringBuilder(); 
          // append a string into StringBuilder input 
          input.append(string); 
          // reverse StringBuilder input 
          input = input.reverse(); 
          string = input + "\n"; //Next to line 
          // print reversed String 
          for (int i = 0; i < input.length(); i++) { 
           System.out.println(input.charAt(i)); 
          } 
         } catch (Exception e) { 
          //Invalid text message back to client. 
          string = "Please send a proper text message\n"; 
         } 
         //Sending the response back to the client. 
         OutputStream os = socket.getOutputStream(); 
         OutputStreamWriter osw = new OutputStreamWriter(os); 
         BufferedWriter bw = new BufferedWriter(osw); 
         bw.write(string); 
         System.out.println("Message sent to the client is " + string); 
         bw.flush(); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         socket.close(); 
        } catch (Exception e) { 
        } 
       } 
      } 
     } 

Client1.java

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.Socket; 
import java.util.Scanner; 

public class Client1 { 

    private static Socket socket; 

    public static void main(String args[]) { 
     try { 
      socket = new Socket("127.0.0.1", 4000); 
      System.out.println("Client Running..."); 

      //Send the message to the server 
      OutputStream os = socket.getOutputStream(); 
      OutputStreamWriter osw = new OutputStreamWriter(os); 
      BufferedWriter bw = new BufferedWriter(osw); 
      System.out.println("Type in a string and Press Enter..."); 
      Scanner sc = new Scanner(System.in); 
      String string = sc.next(); 
      System.out.println("string = " + string); 
      String sendMessage = string + "\n"; ////Next to line 
      bw.write(sendMessage); 
      bw.flush(); 
      System.out.println("Message sent to the server : " + sendMessage); 

      //Get the return message from the server 
      InputStream is = socket.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(is); 
      BufferedReader br = new BufferedReader(isr); 
      String message = br.readLine(); 
      System.out.println("Message received from the server : " + message); 
     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } finally { 
      //finally close the socket 
      try { 
       socket.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}