无法在javax.comm中获得USSD的响应

时间:2015-01-30 14:08:58

标签: java at-command ussd javax.comm

我是javax.comm的新用户,我有一个项目,我希望将USSD命令发送到我的调制解调器并接收响应以进行进一步处理。在下面的代码中,一切正常,USSD代码已发送,但程序仍然无限命令:inputStream.read(buffer);

它不返回任何值,程序仍保留在该点。有什么帮助吗?

import java.io.*;
import java.util.*;
import java.lang.*;

import javax.comm.*;

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";
    String line2 = "ATQ0V1E0";
    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........"+portId.getName());
            if ( portId.getName().equals("COM9")){
                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(line2.getBytes());
                    System.out.println("Write Ends. Sleeping Starts...");
                    byte buffer[] = new byte[10000];
                    Thread.sleep(500);
                    System.out.println("Sleeping Ends. Reading Starts...");
                    // read the response from mobile phone
                    int j = inputStream.read(buffer);
                    System.out.println("AT Comand response: "+j+" - "+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);
    }

public void serialEvent1(SerialPortEvent arg0) {
    // TODO Auto-generated method stub

}
}

0 个答案:

没有答案