2016-10-20 2 views
0

내 라즈베리 파이와 함께 사용할 간단한 클라이언트 - 서버를 만들고 있습니다.자바에서 소켓을 사용하여 여러 줄 인쇄

내가 달성하고자하는 것은 내 클라이언트를 사용하여 서버에 "ACKTEMP"를 보내는 것입니다. 그런 다음 서버는 직렬 포트 (STM32 Nucleo Board btw)를 호출합니다.이 메시지를 통해 직렬 통신을 사용하여 온도를 다시 얻은 다음 클라이언트로 다시 보냅니다.

내 질문에, Nucleo 널 (TEMP : xx) 같은 문자열을 반환합니다. 여러 문자열을 한 번에 다시 보내기 시작할 때까지 작동합니다. 내가 ACKTEMP를 보내고 (TEMP : xx)와 "Temperature OK"를 받기를 원한다면, 나는 단지 (TEMP : xx) 첫 줄만 얻는다.

그래서 내 코드의 어딘가에서 뭔가를 바꾸어서 하나의 줄 대신 모든 줄을 인쇄 한 다음 그만 두는 것 같습니다. 제 프로그래밍이 그렇게 위대하지 않으면 제게 화를 내지 마십시오. 저는 학생이고 모든 것을 이해하려고 노력합니다.

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 
    } 

} 

답변

0

이 문제를 다소 해결하기 위해 다음을 사용했습니다. 그러나 누군가가 더 나은 해결책을 가지고 있다면 그것은 대단히 환영합니다!

내가 한 모든 줄은 새 줄을 원한다. 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]); 
      } 
     }