2016-10-20 1 views
0

Ich erstelle einen einfachen Client-Server mit meinem Raspberry Pi zu verwenden.Drucken Sie mehrere Zeilen mit Sockets in Java

Was ich versuche zu erreichen, ist "ACKTEMP" zum Beispiel an den Server mit meinem Client zu senden. Die Server rufen dann den seriellen Port (der mein STM32 Nucleo Board ist) mit dieser Nachricht an. Ich erhalte die Temperatur unter Verwendung der seriellen Kommunikation zurück und danach wird sie an den Client zurückgesendet.

Meine Frage ist, die Nucleo-Platine gibt einige Saiten wie (TEMP: xx) zurück, das funktioniert gut, bis ich anfange, mehrere Saiten auf einmal ex zu senden. Wenn ich ACKTEMP sende und (TEMP: xx) und "Temperature OK" empfangen möchte, bekomme ich nur die erste Zeile (TEMP: xx).

So scheint es, dass irgendwo in meinem Code muss ich etwas ändern, so druckt es alle Zeilen statt nur eine und dann zu stoppen. Bitte ärgern Sie sich nicht über mich, wenn meine Programmierung nicht so toll ist. Ich bin Student und versuche alles zu verstehen.

public class Client { 

    /** 
    * @param args the command line arguments 
    * @throws java.io.IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     String sentence; 
     String messageFromServer; 
     while(true) 
     { 
     BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
     try (Socket clientSocket = new Socket("192.168.0.135", 6789)) { 
      PrintWriter outToServer = new PrintWriter(clientSocket.getOutputStream(), true); 
      BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
      sentence = inFromUser.readLine(); 
      outToServer.println(sentence + '\n'); 
      messageFromServer = inFromServer.readLine(); 
      System.out.println("FROM SERVER: " + messageFromServer); 
      clientSocket.close(); 
     } 
     } 
    } 

} 

    public class Server { 
     private static SerialPort serialPort; 

    /** 
    * @param args the command line arguments 
    * @throws java.io.IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     String clientSentence; 
     String capitalizedSentence; 
     ServerSocket welcomeSocket = new ServerSocket(6789); 
     serialPort = new SerialPort("/dev/ttyACM0"); 


     while(true) 
     { 
      Socket connectionSocket = welcomeSocket.accept(); 
      BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
      PrintWriter outToClient = new PrintWriter(connectionSocket.getOutputStream(), true); 
      clientSentence = inFromClient.readLine(); 
      try{ 
      //opening port 
      serialPort.openPort(); 

      serialPort.setParams(
        SerialPort.BAUDRATE_115200, 
        SerialPort.DATABITS_8, 
        SerialPort.STOPBITS_1, 
        SerialPort.PARITY_NONE); 

      //Write string to port 
      serialPort.writeString(clientSentence + "\n"); 

      System.out.println("String wrote to port, waiting for response.."); 

      try { 
        Thread.sleep(10);     //1000 milliseconds is one second. 
       } catch(InterruptedException ex) { 
        Thread.currentThread().interrupt(); 
       } 

      String buffer = serialPort.readString(); 
      outToClient.println(buffer + '\n'); 

      serialPort.closePort();//Close serial port 

      } 
      catch(SerialPortException ex){ 
      System.out.println("Error writing data to port: " + ex); 
      } 
     } 
     // TODO code application logic here 
    } 

} 

Antwort

0

Ich habe das folgende verwendet, um dieses Problem irgendwie zu lösen. Aber wenn jemand eine bessere Lösung hat, ist es sehr willkommen!

Was ich getan habe, ist für jede Zeichenfolge ich eine neue Zeile möchte, legte ich ein "~" Zeichen vor der Zeichenfolge in meinem Programm Nucleo STM32.

 String strArray[] = messageFromServer.split("~"); 

     System.out.println("FROM SERVER: " + strArray[0]); 

     for(int i = 1; i < strArray.length; ++i) 
     { 
      if(messageFromServer.indexOf('~') >= 0) 
      { 
       System.out.println("FROM SERVER: " + strArray[i]); 
      } 
     }