2014-09-21 56 views
0
import gnu.io.*; 
import java.io.*; 
import java.util.*; 
import java.lang.*; 

public class SerialWrite implements Runnable, SerialPortEventListener{ 

    static String output=""; 

    public void run(){ 
    } 

    static Enumeration portList; 
    static CommPortIdentifier portId; 
    static String dest = "+923216159133"; 
    static String messageString = "Hello Testing"; 
    static InputStream inputStream; 
    static SerialPort serialPort; 
    static OutputStream outputStream; 

    public void serialEvent(SerialPortEvent event){ 
     switch (event.getEventType()){ 
      case SerialPortEvent.BI: 
      case SerialPortEvent.OE: 
      case SerialPortEvent.FE: 
      case SerialPortEvent.PE: 
      case SerialPortEvent.CD: 
      case SerialPortEvent.CTS: 
      case SerialPortEvent.DSR: 
      case SerialPortEvent.RI: 
      case SerialPortEvent.OUTPUT_BUFFER_EMPTY: 
       System.out.println("Error"); 
      break; 
      case SerialPortEvent.DATA_AVAILABLE:{ 
       BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
       String line = ""; 
       try{ 
        while ((line = reader.readLine()) != null){ 
         if(line.equalsIgnoreCase("OK") || (line.indexOf("+CMGS") != -1)){ 
          output=line; 
         } 
        Thread.sleep(10); 
        } 
       } 
       catch (Exception e){ 
        System.err.println("Error while reading Port " + e); 
       } 
      break; 
     } 
    } //switch 
} 

public SerialWrite(SerialPort serial){ 
    try{ 
     inputStream = serial.getInputStream(); 
     try{ 
      serial.addEventListener(this); 
     } 
     catch (TooManyListenersException e){ 
      System.out.println("Exception in Adding Listener" + e); 
     } 
     serial.notifyOnDataAvailable(true); 
    } 
    catch (Exception ex){ 
     System.out.println("Exception in getting InputStream" + ex); 
    } 
} 

public static void main(String[] args) throws Exception{ 
    int i=0; 
    String line1 = "AT+CMGF=1\r\n"; 
    String line2 = "AT+CMGS=" + "\"" + dest + "\""+"\r\n"; 
    System.out.println("This " + line2); 
    String line3 = messageString; 
    String line4 = "<ctrl+z>"; 
    portList = CommPortIdentifier.getPortIdentifiers(); 
    while (portList.hasMoreElements()){ 
     portId = (CommPortIdentifier) portList.nextElement(); 
     if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL){ 
      System.out.println("SMS Sending........"); 
      if (portId.getName().equals("COM3")){ 
       System.out.println("SMS Sending....Port Found"); 
       try{ 
        serialPort = (SerialPort) portId.open("SerialTestApp", 2000); 
        SerialWrite wr = new SerialWrite(serialPort); 
       } 
       catch (PortInUseException e){ 
        System.out.println("Port In Use " + e); 
       } 
       try{ 
        outputStream = serialPort.getOutputStream(); 
       } 
       catch (IOException e){ 
        System.out.println("Error writing to output stream " + e); 
       } 
       try{ 
        serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); 
       } 
       catch (UnsupportedCommOperationException e){ 
        System.out.println("Error"); 
       } 
       try{ 
        System.out.println("It seems OK now"); 
        outputStream.write(line1.getBytes()); 
        byte buffer[] = new byte[10000]; 
        // read the response from mobile phone 
        inputStream.read(buffer); 
        System.out.println("AT Comand response: "+buffer.toString()); 
        /*System.out.println ("done"); 
        outputStream.write(line2.getBytes()); 
        System.out.println("It seems OK now"); 
        outputStream.write(line3.getBytes()); 
        outputStream.write(line4.getBytes()); 
        System.out.println("This one is output "+output); 
        outputStream.flush(); 
        System.out.println("Message Sent!");*/ 
       } 
       catch (IOException e){ 
        System.out.println("Error writing message " + e); 
       } 
      } 
     } 
    } 
} 


public static void showText(String Text){ 
    System.out.println("TEXT "+Text); 
    } 
} 

我想用GSM手機發送消息(NOKIA 110)第一我試圖發送「AT」指令,但我收到的響應是意想不到它如下所示:獲得AT命令的出乎意料的結果中的java

SMS Sending........ 
SMS Sending....Port Found 
It seems OK now 
**AT Comand response: [[email protected]** 
SMS Sending........ 
SMS Sending........ 
SMS Sending........ 
SMS Sending........ 

其次,當我運行整個程序沒有COMMENTS時,我的手機在最後重新啓動。任何人都可以幫助我解決這個問題。

回答

1

你需要改變你的打印接收的字節數組的內容:

String str = new String(buffer); 
System.out.println(str); 

代替:buffer.toString(),這將打印緩衝區數組的哈希碼。您看到的是來自設備的響應。

至於你的第二部分,在註釋掉的代碼中,嘗試取消註釋:outputStream.flush();,也許該設備仍在等待AT命令並且該命令沒有被刷新到其輸入流。

+0

我試過這個沒有迴應 – user2631892 2014-09-21 14:48:41

+0

設置短信模式時你從設備上得到的迴應是什麼?你的回答是否正常? – BatScream 2014-09-21 16:32:07

+0

我把它改成了System.out.println(「Output:」+ str);輸出後沒有反應: – user2631892 2014-09-21 16:49:55