通过GSM调制解调器的Java串行通信

时间:2014-01-10 03:01:59

标签: java serial-port

参考Stack Overflow中提到的以下问题。

做了一些尝试&错误,我在一年前创建了以下代码,它运行正常。它使用GSM Modem发送短信。您的GSM调制解调器应连接到您的通信端口。您需要Comm.jar库来运行此代码,您可以从http://llk.media.mit.edu/projects/picdev/software/javaxcomm.zip

下载它

我的代码是触发AT命令的简单程序版本。它只是在GSM调制解调器上触发AT命令发送短信。

import javax.comm.*;
import java.io.*;
import java.util.*;

public class SimpleWrite implements Runnable, SerialPortEventListener
{
public void run()
{}

static Enumeration portList;
static CommPortIdentifier portId;
static String messageString = "";
static char ch = '"';
static String dest = ch + "111111111" + ch;  // 10 Digit Mobile Number.
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:
        break;
    case SerialPortEvent.DATA_AVAILABLE:
    {

        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String line = "";
        try
        {

            while ( (line = reader.readLine()) != null)
            {
                System.out.println(line);
            }
        }
        catch (IOException e)
        {
            System.err.println("Error while reading Port " + e);
        }
        break;

    }
    } //switch
 }

  public SimpleWrite(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)
  {
    String line1 = "AT+CMGF=1\r\n";
    String line2 = "AT+CMGS=" + dest + "\r\n";
    String line3 = messageString + "\r\n";
    //String line1 = "AT+CREG=2";
    //String line2 = "AT+CGREG?";

    portList = CommPortIdentifier.getPortIdentifiers();
    while (portList.hasMoreElements())
    {
        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
        {
            if ( portId.getName().equals("COM11"))
            {
                System.out.println("SMS Sending....Port Found");
                try
                {
                    serialPort = (SerialPort) portId.open("SimpleWriteApp", 2000);
                    SimpleWrite wr = new SimpleWrite(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)
                {
                }
                try
                {
                    outputStream.write(line1.getBytes());
                    outputStream.write(line1.getBytes());
                    outputStream.write(line2.getBytes());
                    outputStream.write(line3.getBytes());
                    outputStream.write(26);
                    outputStream.flush();
                }
                catch (Exception e)
                {
                    System.out.println("Error writing message " + e);
                }
            }
        }
       }
     }

   /** show text in the text window
   * @param Text text string to show on the display
   */
   public static void showText(String Text)
   {
      System.out.println(Text);
    }

}

我已尝试过该解决方案,但它没有返回Enumeration“portlist”中的任何端口。 而且我在这个链接中找不到任何DLL http://llk.media.mit.edu/projects/picdev/software/javaxcomm.zip 请建议我如何继续这个。什么是DLL的名称,以便我可以继续?

0 个答案:

没有答案