Ethernet Home Automation EHouse дазваляе аўтаматычна адпраўляць статусу broadcastu UDP (User Datagram Protocol) , якая можа прымаць усе прылады ў вашай лакальнай сеткі або Wi-Fi і IP, якія задавальняюць умове – Знойдзена ў мясцовым маска 255 . 255 . 255 . 0 , , Якая транслюецца ад статусу IP адрасы кантролераў 192 . 168 . 0 . х . UDP Broadcast дазваляе адключыць загрузку стану TCP / IP кліента , які патрабуе падлучэння да кантролер . UDP вяшчання з'яўляецца пратаколам без усталявання злучэння , для распаўсюджвання даных і незалежна ад колькасці прыёмных прыладаў не загружаецца больш працэсара або сеткі сувязі .
Простыя UDP прыёму радыёвяшчання з функцыяй смартфона , панэлямі і Android таблеткі паказана ніжэй .
Таму бясконцы цыкл на аснове гэтай функцыі , Вам трэба стварыць паток (Thread) працуе ў фонавым рэжыме , надаўшы яму самы нізкі прыярытэт працы .
У адваротным выпадку , выкананне гэтай функцыі блакаваць выкананне іншых мерапрыемстваў па праграме .
Зыходны код для атрымання UDP Broadcast Android платформы:
грамадскага несапраўднымі UDP (порт Int) / / Параметр порт, каб забраць змаўчанні транслявацца 6789 – Статус у падвоеным кантролер
{
Byte [] = broadcastadr новых байт [4] ;
Byte [] = localadr новых байт [4] ;
WifiManager WiFi = (WifiManager) getSystemService (Context . WIFI_SERVICE) ; / / WiFi Manager
DhcpInfo DHCP = WiFi . getDhcpInfo () ; / / Атрымаць інфармацыю ад DHCP-WiFi
калі DHCP (== NULL) / / атрымаць значэнне па змаўчанні адключана, калі DHCP сеткі EHouse
{/ / Не DHCP ці памылку на прыладу
broadcastadr [0] = (байт) 192 ;
broadcastadr [1] = (байт) 168 ;
broadcastadr [2] = (байт) 0 ;
broadcastadr [3] = (байт) 255 ;
}
іншае / / DHCP
{
трансляцыю = Int (DHCP . IP-адрас і ; ; DHCP . маска падсеткі) | ~ DHCP . Маска ; / / Для UDP Broadcast – Калі вы хочаце, каб перадаць дадзеныя аб функцыі
Кантролер толькі атрымлівае статус
для (INT = 0 ; да < ; 4 ; Да + +) broadcastadr [K] = (байт) ((трансляцыя> ; > ; да * 8) і ; 0xFF) ;
мясцовыя INT = (DHCP . IP-адрас) ; / / Лакальны IP-адрасоў DHCP
для (INT = 0 ; да < ; 4 ; Да + +) localadr [K] = (байт) ((мясцовыя> ; > ; да * 8) і ; 0xFF) ; / / Для лакальнай IP-адрасоў
}
старацца
{
DS = новая DatagramSocket (порт) ; / / / Праслухоўванне на UDP порт з любога IP
у масцы – UDP-сокет стварыць асобнік нумар лакальнага порта
}
злавіць (Exception е)
{
/ / Ehousecommunication . л ( ” Памылка інэт: атрымаць адрас ” + E . GetMessage ()) ; для тэсту
}
старацца
{
DS . setBroadcast (ісціна) ; / / Уключыць адправіць шырокавяшчальны паведамленне – для перадачы
DS . setReuseAddress (ісціна) ; / / Дазволіць некалькі сокетаў выкарыстоўваць той жа IP-адрас
/ / Ds . setSoTimeout (400) ; / / Прыём тайм-аўт
}
злавіць (Exception IO)
{/ / Ігнараваць памылкі, але мы абараніць ад прыкладання і сістэмныя памылкі
{/ / Ігнараваць памылкі, але мы абараніць ад прыкладання і сістэмныя памылкі
/ / * UDP Broadcast TEST – broadcastu тэст UDP Broadcast з вашага тэлефона ці планшэта – будучыя сувязі з прымяненнем
/ * Паспрабаваць
{
DatagramPacket дд = новы DatagramPacket ( ” Добры дзень Слова TEST Android UPD ” . GetBytes () , 0 , ” Добры дзень Слова TEST Android UPD ” . Даўжыня () ,
InetAddress . getByAddress (broadcastadr) , порт) ;
DS . Напісаць (DD) ; / / Пасылае DatagramPacket
}
злавіць (Exception е)
{
ehousecommunication . л ( ” Перадача дейтаграмм пакеты памылцы: ” + E . GetMessage ()) ;
}
* /
MulticastLock мл = WiFi . createMulticastLock ( ” Multicast уключаны замак ” ) ;
/ / Стварэнне асобніка блока шматадрасных і broadcastu
мл . Набываць () ; / / Multicast блакаванне ўключэння UDP прыёму радыёвяшчання – Ён можа быць адключаны некаторых смартфонах Android для ляторной мэтах эканоміі –
broadcastu UDP падтрымкі актывуе тэлефон, калі ён заблякаваны, і толькі адключаныя
у той час як (! ehousecommunication . Завяршыць) / / бясконцы цыкл для прыёму UDP
{/ / Бясконцы цыкл атрымання UDP статус
DatagramPacket DP = новая DatagramPacket (паведамленне , паведамленне . даўжыня) ; / / Стварэнне UDP датаграммы буфер пакетаў з выкарыстаннем дадзеных – выкарыстоўвае UDP пакетаў
буфера ” паведамленне ”
паспрабуйце {
DS . атрымліваць (DP) ; / / UDP пакетаў прыём ад EHouse сістэмы – атрымлівае порт UDP пакетаў у UDP-сокет
калі (DP . GetLength ()> ; 0) / / калі памер пасылкі больш нуля – нешта атрымаў
{
EhouseTCP . QueryBuff = інш . GetData () ; / / Прысвоіць трансляцыі UDP recepition querybuffer – загружаюцца ў EHouse статус буфера
/ / Dp . SetLength (0) ; – памер пакета усталёўваецца на нуль, каб не апрацоўваць тыя ж дадзеныя некалькі разоў
EhouseTCP . QueryReceived () ; / / Дэкадаванне запыту масіваў дадзеных і запоўніць прылад – дэкадуе стан кантролераў і загружае табліцу стану прыкладання
}
}
злавіць (Exception OS)
{/ / Ігнараваць памылкі
/ / Ehousecommunication . л ( ” asdfasdfsafsa ” + Os . GetMessage ()) ; / / Для тэсту толькі
}
}
мл . Release () ; / / UDP Multicast замак бясплатна для атрымання EHouse прыкладанняў – здымае блакаванне шматадрасных
DS . Close () ; / / Зачыняем сокет датаграмм ў канцы – закрывае сокет ў канцы
}
Multicast блакавання можа запатрабавацца ў некаторых Android прылад .
Мясцовыя UDP Broadcast ў выпадку з мабільнымі тэлефонамі можа быць уключаны ці не ў залежнасці ад мабільнага тэлефона прашыўку .
Яна таксама можа быць інвалідам для эканоміі батарэі і па меркаваннях бяспекі або паменшыць загрузку працэсара ў сетку на працы .
(Звярніце ўвагу на канфігурацыю ядра: CONFIG_IP_MULTICAST не ўстаноўлены) .
У дадатак , некаторыя мадэлі могуць быць заблакаваныя мясцовыя брандмаўэр і трэба актываваць перадачу на дадзены порт (па змаўчанні 6789) .
Outside Broadcast пры выкарыстанні GPRS-інтэрнэт злучэнняў , EDGE , 3G , 4G можа быць заблакаваная або адмыкнутая аператарам сеткі . Часцей за ўсё , аднак , Варта чакаць , , Што зафіксавана ў мэтах звесткі да мінімуму выкарыстанне спасылцы .
У некаторых мадэлях мабільных тэлефонаў , Праграмная рэалізацыя статус кантролераў атрымання UDP можа быць вельмі цяжка ці нават немагчыма . Можа спатрэбіцца выкарыстанне спецыяльных niebrandowanego прашыўкі або смартфона .
У дадатак , неабходна выконваць асцярожнасць пры upgradowaniu прашыўку і праверыць, што ўсе функцыі працуюць правільна з скрынкі , У адваротным выпадку дыягназ памылкі будзе вельмі цяжка .
Грунтуючыся на некаторых тэлефонах HTC і іншых прадуктаў, якія змяшчаюць сістэмы Android версіі аперацыйнай ніжэй 2 . 3 . 3 назіраецца агульны блок UDP прыёму broadcastu .
Гэта была версія Android (2 . 1 – 2 . 3 з перыяду 01 . 01 . 2010 – 14 . 06 . 2011)
Калі вы не можаце атрымаць UDP broadcastu загрузкі і ўстаноўкі , Новы Android ROM версіяй мінімум 2 . 3 . 3 (14 чэрвеня , 2011) , якія праверылі правільнасць працы трансляцыю нагрузкі UDP .
Kernel Version 2 . 6 . 35 . 10 – htcg3ef43272 – ядра @ and18 – 2 # 1 .
Няма . 3software . 14 . 405 . 1 .
Для іншых марак тэлефонаў з падобнымі праблемамі , калі ласка, спампаваць прашыўкі Android Rom ад вытворцы , Версія не менш за 2 . 3 . 3 .
Адзначым таксама асноўныя характарыстыкі UDP пакетаў .
Яны з'яўляюцца асінхроннымі, і патрабуюць чытання аб тым, што можа стаць прычынай дадзеных памылак чытання , іх страты (скід) , Асабліва з павольнай абсталявання , сувязі , спалучаюць у сабе высокую нагрузку працэсара і акупацыі смартфонаў і планшэтаў .
Дадзеныя Udp статус абсталяваны ў кантрольнай сумы для праверкі дакладнасці дадзеных .
Вытворца Home Automation EHouse Home Automation EHouse
EHouse Кантролеры – Home Automation EHouse