利用通訊api編寫簡訊軟體

來源:互聯網
上載者:User

 對於SerialBuffer類有一點需要說明一下,就是在putChar和getMsg方法前必須加synchoronized關鍵字,這是因為這個類是在多線程中調用,由於在這兩個方法中訪問了共用資源,為了不出現髒資料,因此,必須加這個關鍵字。 

  readSerial類的實現 

package com.message; import Java.io.*; // 這個類從指定的COM口讀資料,並將這些資料儲存在緩衝區中 // ReadSerial是一個線程類  public class ReadSerial extends Thread { private SerialBuffer comBuffer; private InputStream comPort; // 這個方法是ReadSerial類的建構函式,第一個參數將緩衝區傳入類中,第二個參數// 是被開啟的COM口的輸入資料流  public ReadSerial(SerialBuffer serialBuffer, InputStream port) { comBuffer = serialBuffer; comPort = port; } // 調用Thread的start方法後,運行run方法  public void run() { int c; try { while (true) { c = comPort.read(); // 一個字元、一個字元地從COM口讀資料  comBuffer.putChar(c); } } catch (IOException e) {} } }  

  接下來實現負責通過資料線和手機通訊的類OperateMobile。這個類可以通過send方法控制手機傳送簡訊。 

public class OperateMobile
{
private MySerial mySerial;
private static char symbol = 10;
private static char symbol1 = 13;
public static boolean open(int port) {
mySerial = new MySerial(port);
if (mySerial.Initialize() == 1) {
return true;
}
else {
return false;
}
}
// 設定簡訊發送模式
private static boolean setMode(int mode)
String strReturn, strSend = “”;
try {
// 模式字串
strSend = "AT+CMGF=" + String.valueOf(mode) +
String.valueOf(symbol1);
// 將模式通過COM口寫入手機
mySerial.WritePort(strSend);
strReturn = "";
// 從手機讀出長度為6的返回資訊,如果包含“OK”,則說明設定成功
strReturn = mySerial.ReadPort(6);
if (strReturn.indexOf("OK", 0) != -1) {
return true;
}
return false;
}
catch (Exception ex) {
return false;
}
}
public static boolean send (String phoneCode, String msg) {
String strReturn = “”, strSend = “”;
char symbol2 = 34;
char symbol3 = 26;
if (setMode(1) != true) { // 設定簡訊發送模式
return false;
}
try {
strSend = "AT+CSMP=1,173,36,08" + String.valueOf(symbol1);
mySerial.writePort(strSend);
sleep(300);
strReturn = mySerial.ReadPort(6); // 讀返回字串
if (strReturn.indexOf("OK", 0) != -1) { // 如果成功,進行下一步
// 將對方的電話號傳入手機
strSend = "AT+CMGS=" + String.valueOf(symbol2) + phoneCode +
String.valueOf(symbol2) +
String.valueOf(symbol1);
mySerial.writePort(strSend);
strReturn = "";
sleep(200);
strReturn = mySerial.ReadPort(4);
byte[] str1 = null;
try {
str1 = msg.getBytes("GBK");
}
catch (Java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
// 將發送資訊變成十六進位發送
strSend = encodeHex(str1, msg) + String.valueOf(symbol3) +
String.valueOf(symbol1);
mySerial.writePort(strSend);
sleep(200);
strReturn = mySerial.ReadPort(8); // 讀資訊以確定是否發送成功
if (strReturn.indexOf("+CMGS", 0) != -1) {
System.out.println("OK");
return true;
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.