안녕하세요 안드로이드 초보입니다.
byte[] responseBuffer = null;
DatagramSocket clientSocket = null;
try {
clientSocket = new DatagramSocket(mPort);
InetAddress IPAddress = InetAddress.getByName(mIp);
// 데이터 요청
byte[] requestBuffer = requestSnapshotData();
DatagramPacket send_packet = new DatagramPacket(requestBuffer, requestBuffer.length, IPAddress, mPort);
clientSocket.send(send_packet);
//clientSocket.setSoTimeout(4000);
// 데이터 수신
byte[] receiveBuffer = new byte[BUFFER_SIZE * 10];
DatagramPacket packet = new DatagramPacket(receiveBuffer, receiveBuffer.length);
clientSocket.receive(packet);
responseBuffer = packet.getData();
// UDP 커넥션 종료
clientSocket.close();
clientSocket = null;
} catch (IOException e) {
e.printStackTrace();
}
return responseBuffer;
}
asyncTask의 doInBackground에서 위 통신부분을 호출하여 데이터를 받도록 하였는데
setSoTimeout을 사용하였을 경우 이 다음 요청부터는
java.net.BindException: bind failed: EADDRINUSE (Address already in use)
에러가 납니다.
만약 setSoTimeout을 사용하지 않는다면 아예 AsyncTask를 생성하지 않고 실행되지 않습니다.
어떤 방식으로 해야 서버에서 응답이 없는 경우를 처리할 수 있을가요??