11-07 08:11:40.308: E/THREAD(3533): Socket closed
11-07 08:11:40.308: W/System.err(3533): java.net.SocketException: Socket closed
11-07 08:11:40.308: W/System.err(3533): at libcore.io.Posix.recvfromBytes(Native Method)
11-07 08:11:40.308: W/System.err(3533): at libcore.io.Posix.recvfrom(Posix.java:131)
11-07 08:11:40.308: W/System.err(3533): at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164)
11-07 08:11:40.308: W/System.err(3533): at libcore.io.IoBridge.recvfrom(IoBridge.java:503)
11-07 08:11:40.308: W/System.err(3533): at java.net.PlainDatagramSocketImpl.doRecv(PlainDatagramSocketImpl.java:161)
11-07 08:11:40.308: W/System.err(3533): at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:169)
11-07 08:11:40.316: W/System.err(3533): at java.net.DatagramSocket.receive(DatagramSocket.java:254)
11-07 08:11:40.316: W/System.err(3533): at com.example.student.LocalService$MessageReciver.run(LocalService.java:184)
이러고 나서 더이상 수신이 안됩니다...
해당 소스는 이렇습니다.
public class MessageReciver extends Thread {
public void run() {
try {
while (keepRunning) {
byte[] buffer = new byte[1000];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if(!pm.isScreenOn()) {
screen = false;
while(!screen)
Thread.sleep(1000);
}
byte[] result = new byte[packet.getLength()];
System.arraycopy(packet.getData(), 0, result, 0, packet.getLength());
chatMessage = new String(result, 0, packet.getLength(), "UTF-8");
Message message = handler.obtainMessage(1, chatMessage);
handler.sendMessage(message);
}
} catch (IOException e) {
Log.e("THREAD", e.getMessage());
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.e("THREAD", e.getMessage());
e.printStackTrace();
}
}
}
로컬 서비스 클래스에서 선언하고 start시킨 스레드입니다.
이후에 저 socket.receive(packet);
에서 블럭상태로 진행이 안됩니다.
감사합니다.