eHouse樓宇自動化系統 – Android軟件控制器通過UDP接收狀態

以太網 家庭自動化 eHouse可以讓您自動發送狀態broadcastu的UDP(User Datagram Protocol,用戶數據報協議) , 它可以接收所有在你的局域網或無線網絡連接和IP的設備滿足條件 – 發現局部屏蔽255 . 255 . 255 . 0 , 被廣播關閉狀態的控制器192的IP地址 . 168 . 0 . x . UDP廣播可以讓您禁用狀態的TCP / IP客戶端下載 , 這需要一個連接到控制器 . 廣播UDP是一個無連接的協議 , 傳播數據和接收設備的數量無關的不加載的CPU或網絡鏈路 .
簡單的UDP廣播接收功能與智能手機 , 如下圖所示板和Android平板電腦 .
因此這是一個無限循環的基礎上,該函數 , 您需要創建一個線程(thread)在後台工作 , 它的優先級最低的工作 .
否則 , 執行此功能阻止執行其他活動的程序 .
接收UDP廣播android平台的源代碼:
公共無效的INT端口(UDP)/ /參數拿起默認的端口廣播6789 – 以二進制控制器的狀態
{
byte []的broadcastadr =新的字節[4] ;
byte []的localadr =新的字節[4] ;
,WifiManager WIFI =(WifiManager)getSystemService(背景 . WIFI_SERVICE) ; / /無線網絡經理
DhcpInfo DHCP =無線上網 . getDhcpInfo() ; / /獲取信息從無線DHCP
(DHCP == NULL)/ /默認值被禁用,如果DHCP網絡eHouse
{/ /沒有使用DHCP或錯誤的設備
broadcastadr [0] =(字節)192 ;
broadcastadr [1] =(字節)168 ;
broadcastadr [2] = 0(字節) ;
broadcastadr [3] =(字節)255 ;
}
/ / DHCP
{
廣播= INT(DHCP . IP地址及 ; ; DHCP . 網絡掩碼)|〜DHCP . 網絡掩碼 ; / / UDP廣播 – 如果你想播放功能上的數據
控制器接收狀態
(K = 0 ; K < ; 4 ; K + +)broadcastadr [K] =(字節)((廣播> ; > ; K * 8) ; 為0xFF) ;
當地INT =(DHCP . 為IPADDRESS) ; / /本地IP地址的DHCP
(K = 0 ; K < ; 4 ; K + +)localadr [K] =(字節)((本地> ; > ; K * 8) ; 為0xFF) ; / /本地IP地址
}
嘗試
{
DS =新的DatagramSocket(端口) ; / / /監聽UDP端口的數據從任何IP
在一個面具 – UDP套接字創建一個實例的本地端口號
}
趕上(例外五)
{
/ / Ehousecommunication . L( ” 錯誤INET:獲取地址 ” + E . getMessage()方法) ; 測試
}
嘗試
{
DS . setBroadcast(真實) ; / /允許發送廣播消息 – 傳輸
DS . setReuseAddress(真實) ; / /允許多個套接字使用相同的IP地址
/ / DS . setSoTimeout(400) ; / /接收超時
}
趕上(例外IO)
{/ /忽略錯誤,但我們防止應用程序和系統錯誤
}
/ / * UDP廣播測試 – broadcastu測試UDP廣播從您的手機或平板電腦 – 未來的通信的應用程序的
/ *嘗試
{
DatagramPacket的DD =新的DatagramPacket( ” 您好字從Android UPD測試 ” . getBytes()構造 , 0 , ” 您好字從Android UPD測試 ” . 長度() ,
InetAddress類 . getByAddress(broadcastadr) , 端口) ;
DS . 發送(日) ; / /發送一個DatagramPacket
}
趕上(例外五)
{
ehousecommunication . L( ” 發送數據報數據包錯誤: ” + E . getMessage()方法) ;
}
* /
MulticastLock毫升=無線上網 . createMulticastLock( ” 組播功能的鎖 ” ) ;
/ /創建一個實例塊組播和broadcastu的
毫升 . 獲得() ; / /組播鎖啟用UDP廣播接收 – batery節能的目的,它可以禁用某些Android智能手機 –
broadcastu UDP支持激活的手機,如果它被鎖定,只禁用
(ehousecommunication . 終止)/ /無限循環UDP接收
{/ /無限循環接收UDP狀態
DatagramPacket類DP =新的DatagramPacket(消息 , 信息 . 長) ; / /創建UDP數據報數據包緩衝區數據 – 利用UDP包
緩衝 ” 信息 ”
嘗試{
DS . 接收(DP) ; / /接收UDP數據包eHouse系統 – 接收數據包的UDP端口的UDP套接字
(DP . 的getLength()> ; 0)/ /如果大於零的大小包裹 – 東西收到
{
EhouseTCP . QueryBuff = DP . getData()方法 ; / /分配UDP廣播recepition的querybuffer – 裝入緩衝器狀態eHouse
/ / DP . SetLength函數(0) ; – 數據包的大小被設置為0,以便不重複處理相同的數據
EhouseTCP . QueryReceived() ; / /查詢數據解碼陣列,並填寫設備 – 解碼控制器的狀態並加載應用程序狀態表
}
}
趕上(異常OS)
{/ /忽略錯誤
/ / Ehousecommunication . L( ” asdfasdfsafsa ” + OS . getMessage()方法) ; / /測試用
}
}
毫升 . 釋放() ; / /組播UDP鎖免費接收eHouse應用 – 釋放該鎖組播
DS . () ; / /關閉數據報套接字結束 – 結束時,關閉套接字
}
組播鎖,可能需要在一些Android設備 .
本地廣播UDP的情況下,手機可以啟用或不依賴於手機固件 .
它也可以被永久地禁止為節省電池,出於安全原因,或在工作中,以減少在網絡上的CPU負載 .
(請注意,內核配置:沒有設置CONFIG_IP_MULTICAST) .
此外 , 本地防火牆可以阻止某些型號的,需要激活的傳輸在一個給定的端口(默認6789) .
實況轉播時使用GPRS上網連接 , EDGE , 3G , 4G可以由網絡運營商鎖定或解鎖 . 更多的時候 , 但 , 應預期 , 它是固定的,以便盡量減少在鏈路的利用率 .
在某些型號的手機 , 軟件控制器接收UDP的執行情況是非常困難的,甚至是不可能的 . 可能需要使用的的特殊固件niebrandowanego或智能手機 .
此外 , 護理時,必須採取upgradowaniu固件,並檢查所有的功能都正常工作,開箱即用的 , 否則將是非常困難的診斷錯誤 .
基於一些HTC手機和其他產品中含有的Andr​​oid操作系統版本低於2 . 3 . 3觀察到的總塊UDP接待broadcastu .
這是版本的Andr​​oid(2 . 1 – 2 . 3 01期間 . 01 . 2010 – 14 . 06 . 2011)
如果你不能接收UDP broadcastu的下載和安裝 , 新的Andr​​oid ROM版本,最低2 . 3 . (6月14日 , 2011) , 測試的正確性的工作負荷UDP廣播 .
內核版本2 . 6 . 35 . 10 – htcg3ef43272 – 內核@ and18 – 2#1 .
沒有 . 3軟件 . 14 . 405 . 1 .
對於其他品牌的手機有類似問題 , 請下載固件的Andr​​oid ROM從製造商 , 至少為2的版本 . 3 . 3 .
還要注意的UDP數據包的基本特徵 .
他們是異步的,需要讀什麼可能會導致數據讀取錯誤 , 他們的損失(脫落) , 特別是與慢速設備 , 鏈接 , 結合高負載和CPU佔用的智能手機和平板電腦 .
UDP狀態數據均裝備校驗來檢查數據的有效性 .
家庭自動化生產 eHouse 家庭自動化 eHouse
eHouse控制器 – 家庭自動化 eHouse