package Ġcom . pan an fly . lo ac al socket Ċ Ċ import Ġandroid . net . Local Server Socket Ċ import Ġandroid . net . Local Socket Ċ import Ġandroid . net . Local SocketAddress Ċ import Ġandroid . util . Log Ċ import Ġjava . lang . StringBuilder Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ class ĠLocal Socket Server Ġ( private Ġval Ġaddress : ĠString ) Ġ: ĠRunnable Ġ{ ĊĠĠĠ Ġprivate Ġfinal Ġval ĠTAG Ġ= ĠLocal Socket Server :: class . java . simple Name ĊĠĠĠ Ġprivate Ġvar Ġm Local Server Socket : ĠLocal Server Socket Ġ= ĠLocal Server Socket ( address ) ĊĠĠĠ Ġprivate Ġval Ġis Running : ĠAtomic Boolean Ġ= ĠAtomic Boolean ( false ) ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Running . set ( true ) ĊĠĠĠĠĠĠĠ ĠThread ( this ). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Running . set ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlocal Socket : ĠLocal Socket ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Socket Ġ= Ġm Local Server Socket . accept () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Socket . receive BufferSize Ġ= Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Socket . send BufferSize Ġ= Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhile ( isRunning . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( 1 0 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġlocal Socket ?. inputStream ?. read ( bytes ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġread ?. let Ġ{ ĠString ( bytes , Ġ 0 Ġ, Ġit ) Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Server Ġrec Ġmsg : Ġ$ str ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Socket ?. output Stream ?. write (" Server Ġmsg Ġ$ address \ n ". toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlocal Socket ?. close () ĊĠĠĠĠĠĠĠ Ġm Local Server Socket . close () ĊĠĠĠ Ġ} Ċ }