最近在Linux環境下利用開源組件SMSLib,開發簡訊貓應用,經常遇到這個錯誤,發現網上也有很多朋友遇到過這個問題,現在將解決這個問題的方案分享給大家。
開發環境:
Linux ReadHat5.4 64位,核心:2.6.33.20 ,JDK1.6,SMSServer-3.5.2.jar
異常資訊:
圖1-1
解決方案:
遇到這個異常時,請檢查以下二個方面:
1、是否啟用輪循模式?
方式1)、在jvm中,添加-Dsmslib.serial.polling啟動參數
方式2)、在JAVA代碼中,在調用startService之前,顯示啟用輪循模式
Service.getInstance().S.SERIAL_POLLING = true;//啟用輪循模式
2、建立串口網關對象時,是否設定了正確的簡訊貓裝置生產廠商?
SerialModemGateway gateway = new SerialModemGateway("modem.com1", "/dev/ttyUSB1", 9600, "Wavecom", "型號");
參數說明:
modem.com1:網關ID(即簡訊貓連接埠ID,多個簡訊貓時,用於標識是由哪個口發出的簡訊)
/dev/ttyUSB1:串口名稱(USB轉串口,簡訊貓中的所有連接埠自動被作業系統映射到/dev/目錄下,以ttyUSB*開頭的檔案上,前提是系統預裝有USB轉串口的驅動),註:Linux下2.6.32以上核心已預裝USB串口裝置驅動,如果低版本的核心,未檢測到USB裝置,則需要自己安裝驅動或升級核心。
9600:傳輸速率,根據二次開發包中的CommTest.java測試程式,檢測你的裝置所支援的傳輸速率。
Wavecom:生產廠商名稱,必須設定正確,否則SMSLib在初始裝置時,會報No response from Device異常,原因是SMSLib為不同的生產廠商,有相應的AT指定介面實現,見:
圖1-2
在“圖1-1“中,是因為我在建立串口網關對象是,指定了廠商名稱為“HuaWei“,所以報了1-3所示異常:
圖1-3
型號:可以不用指定,如果指定了型號,SMSLib在初始化裝置的時候,會找特定型號的AT指令實作類別,如果沒找到有可能會出現初始化裝置異常,但據我測試,如果沒有找到指定廠商指定的型號的AT指令實現,會去指定廠商的通用實現介面
以上異常是基於SMSServer-3.5.2在Linux環境下開發所遇到的一些問題,和大家分享,Window上也會有相類似的問題,可參考上面的解決思路去尋找解決方案,另外簡訊貓二次開發包還有其它的廠商進行了底層AT指令的封裝,比如:jindiJavaSms(金笛)開發包,用它時,我也遇到了類似的問題,解決方式也和上面差不多,只不過可能參數有些不同,在這裡不做詳細介紹,如有遇到同樣問題的朋友,歡迎大家討論!