package Ġcom . example . computer net . service Ċ Ċ import Ġandroid . app . Intent Service Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . support . v 4 . content . Local Broadcast Manager Ċ import Ġandroid . util . Log Ċ import Ġjava . net . Data gram Packet Ċ import Ġjava . net . Data gram Socket ĊĊ Ċ class ĠServer Service Ġ: ĠIntent Service (" Server Service ") Ġ{ ĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRE CE IVE _ MSG : ĠString Ġ= Ġ" receive _ msg " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPORT : ĠString Ġ= Ġ" port " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTOP _ SERVER : ĠString Ġ= Ġ" stop _ server " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOCAL _ HOST : ĠString Ġ= Ġ" local _ host " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFROM _ ADDRESS : ĠString Ġ= Ġ" from _ address " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Local Broadcast Manager Ġ= ĠLocal Broadcast Manager . getInstance ( this ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġservice : ĠData gram Socket ĊĠĠĠ Ġprivate Ġvar Ġrunning : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġon Handle Intent ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrunning Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Filter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( STOP _ SERVER ) ĊĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= ĠServer Receiver () ĊĠĠĠĠĠĠĠ Ġm Local Broadcast Manager . register Receiver ( receiver , Ġintent Filter ) ĊĠĠĠĠĠĠĠ Ġval Ġport : ĠInt Ġ= Ġintent ?. getInt Extra ( PORT , Ġ 1 1 7 9 1 ) Ġ?: Ġ 1 1 7 9 1 ĊĠĠĠĠĠĠĠ Ġval Ġlocal Ip : ĠString ? Ġ= Ġintent ?. getString Extra ( LOCAL _ HOST ) ĊĠĠĠĠĠĠĠ Ġ// åĮħ è£ħ IP åľ°åĿĢ ĊĠĠĠĠĠĠĠ Ġ// åĪĽå»º æľįåĬ¡ ç«¯ çļĦ Data gram Socket å¯¹è±¡ ï¼Į éľĢè¦ģ ä¼łåħ¥ ç«¯åı£ åı· ĊĠĠĠĠĠĠĠ Ġservice Ġ= ĠData gram Socket ( port ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġreceive Address : ĠString ĊĠĠĠĠĠĠĠ Ġvar Ġreceive Msg : ĠString ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceive Bytes Ġ= ĠByteArray ( 2 0 4 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĽå»º æİ¥åıĹ ä¿¡æģ¯ çļĦ åĮħ å¯¹è±¡ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceive Packet Ġ= ĠData gram Packet ( receive Bytes , Ġreceive Bytes . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Server Service ", Ġ" æĪĲåĬŁ åĲ¯åĬ¨ server ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¼ĢåĲ¯ ä¸Ģä¸ª æŃ» å¾ªçİ¯ ï¼Į ä¸į æĸŃ æİ¥åıĹ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æİ¥æĶ¶ æķ°æį® ï¼Į ç¨ĭåºı ä¼ļ éĺ» å¡ŀ åĪ° è¿Ļä¸Ģ æŃ¥ ï¼Į çĽ´ åĪ° æĶ¶ åĪ° ä¸Ģä¸ª æķ°æį® åĮħ ä¸º æŃ¢ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . receive ( receive Packet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Server Service ", Ġ" æĪĲåĬŁ æİ¥æĶ¶ ä¿¡æģ¯ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è§£æŀĲ æĶ¶ åĪ° çļĦæķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceive Address Ġ= Ġreceive Packet . address . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceive Address Ġ= Ġreceive Address . substring ( 1 , Ġreceive Address . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Server Service ", Ġ" è¯¥ æķ°æį® åĮħ æĿ¥ èĩª :$ receive Address ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è·³ è¿ĩ èĩªå·± åıĳéĢģ çļĦæķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( receive Address Ġ== Ġlocal Ip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceive Msg Ġ= ĠString ( receive Packet . data , Ġ 0 , Ġreceive Packet . length ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceive Msg ( receive Msg , Ġreceive Address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åħ³éĹŃ Data gram Socket å¯¹è±¡ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . take If Ġ{ Ġservice . isConnected Ġ} ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Local Broadcast Manager . unregister Receiver ( receiver ) ĊĠĠĠĠĠĠĠ ĠLog . e (" Server Service ", Ġ" server åħ³éĹŃ ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// å¤ĦçĲĨ æİ¥æĶ¶ çļĦä¿¡æģ¯ ĊĠĠĠ Ġprivate Ġfun Ġreceive Msg ( receive Msg : ĠString , Ġaddress : ĠString ){ ĊĠĠĠĠĠĠĠ ĠLog . e (" Server Service ", Ġ" æĶ¶ åĪ° ä¿¡æģ¯ ï¼ļ $ receive Msg ") ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( RECEIVE _ MSG ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" msg ", Ġreceive Msg ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( FROM _ ADDRESS , Ġaddress ) ĊĠĠĠĠĠĠĠ Ġm Local Broadcast Manager . send Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// å¹¿ æĴŃ æİ¥æĶ¶ åĻ¨ çĶ¨äºİ ç»ĵæĿŁ è¯¥ æľįåĬ¡ ĊĠĠĠ Ġinner Ġclass ĠServer Receiver : ĠBroadcast Receiver (){ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( p 0 : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( intent ?. action ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTOP _ SERVER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . take If Ġ{ Ġit . isConnected Ġ} ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ