2013-02-25 45 views
0

我有一個servlet上下文監聽器,其中有一個串口監聽器。在這個監聽我省從串口的字節是這樣的:將字節數組從servlet監聽器傳遞到控制器

public void contextInitialized(ServletContextEvent contextEvent){ 
    context = contextEvent.getServletContext(); 
    serial = SerialFactory.createInstance(); 
    serial.open(Serial.DEFAULT_COM_PORT, 19200); 
    serial.addListener(new SerialDataListener(){ 
    @Override 
    public void dataReceived(SerialDataEvent arg0) {  
    private byte[] serialDataByte; 
    serialDataByte = arg0.getData().getBytes(); 
    context.setAttribute("serialData", serialDataByte); 
    seriale.write(serialDataByte); //the echo on serial port show me the right bytes         
    }   
    }); 
} 

我控制器上我通過訪問串口數據:

private byte[] temp; 
temp = (byte[]) getServletContext().getAttribute("serialData"); 
for(int i=0; i<temp.length;i++){ 
    output.println(Integer.toHexString(temp[i] & 0x00FF));  
} 

我發送到串行端口此字節數組:

aa 7f 40 a 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 fe 1a 

長度爲69 有時候在我的臨時數組我只有原來陣列的一小部分,有時是:

aa 7f 40 a 72 0 0 0 0 0 0 0 0 0 0 

有時:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 fe 1a 

有時的69個字節的右陣列。 如何將從串口取得的確切數據傳給我的控制器? 在此先感謝

回答

1

如果有更多數據進入該端口,此代碼將覆蓋您最初在serialData上下文屬性中的內容。因此,只有在屬性存在的情況下才寫入,並且在初始dataRecieved()調用之後考慮關閉端口。

serial.addListener(new SerialDataListener(){ 
    @Override 
    public void dataReceived(SerialDataEvent arg0) {  
     private byte[] serialDataByte; 
     if (context.getAttribute("serialData") == null) { 
      serialDataByte = arg0.getData().getBytes(); 
      context.setAttribute("serialData", serialDataByte); 
      seriale.write(serialDataByte); // I assume this is only for debugging 
              // and also supposed to be `serial` 
      serial.close(); 
     } 
    } 
}); 
+0

謝謝你的回答。這樣,如果上下文屬性不爲空,如何在第一次之後保存串行數據?每秒一臺PC發送一個字節數組到這個串行端口,我需要在網頁中顯示這個數組的一些字節。 – user2108656 2013-02-26 22:53:08

相關問題