마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AsyncTask 사용 UDP 서버에 데이터 요청시 응답없을 때 [closed]

0 추천

안녕하세요 안드로이드 초보입니다.

 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를 생성하지 않고 실행되지 않습니다.

어떤 방식으로 해야 서버에서 응답이 없는 경우를 처리할 수 있을가요??

질문을 종료한 이유: 답 찾음
파워백곰 (770 포인트) 님이 2015년 12월 11일 질문
파워백곰님이 2015년 12월 23일 closed
어떻게 해결 하셨나요? 같은 문제로 헤매고 있는 중입니다,,
저는 AsyncTask의 doInBackground 에서   위함수를 호출하여 데이터를 얻어오게끔 했는데요
결과적으로 setSoTimeout을 저 위치에서 사용했고 doInBackground 에서 데이터를 못 얻어오면 socket.close() 하였습니다.
...