안드로이드 개발 질문/답변
(글 수 45,052)
try
{
InetAddress serverAddr = InetAddress.getByName(serverIP);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, serverPort);
try
{
OutputStream out = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
String data = file_count+"";//전송할 파일 갯수
bw.write(data);//전송
bw.flush();
socket.close();
con_suc=0;
}
catch(Exception e){
System.out.println("연결 실패1__con_suc=1");
con_suc=1;
e.printStackTrace();
}
finally {socket.close();}
}
catch (Exception e) {
con_suc=1;
System.out.println("연결 실패2__con_suc=1설정");
//Log.e("TCP", "C: Error2", e);
}
이런식으로 서버쪽에다 소켓을 연결하도록 해놨는데
2.3 생강빵에선 만약 일정시간이상 연결이 안될경우
자동으로 연결이 실패하며 자동으로 catch문으로 넘어갔습니다.
덕분에 딱히 별다른 처리를 안했었는데
문제는 지금 펌웨어를 ICS로 올리고 나니까
저 '일정시간'이 굉장히 길어졌습니다.
올리기 전에는 대충 길어야 10~20초정도 연결 시도하다 안되면 넘겨버리던데
올리고 난 뒤에는 3분 이상을 기다리곤 catch로 넘어가더군요
방금전까진 그냥 처리 안되고 어플이 죽어버린줄 알았습니다.
지금 이 글 쓰고 있는데 catch 이후 처리가 뜨더라고요
이정도로 오래 응답없음이 지속되면 좀 곤란한데...
어떻게 저걸 줄일 방법이 없을까요
최종발표가 월요일인데 펌웨어 업글에서 뒤통수 맞을줄은 생각도 못했네요...
아직 UI디자인같은 마무리작업도 남았는데
지금에와서 쓰레드 처리라던지로 돌리기엔 너무 늦은거같고....
정 안되면 펌웨어를 다운시켜야할거같은데....
2012.08.16 19:22:33
connect(SocketAddress endpoint, int timeout)
이결로 한번 해보시죠. 앞의 거는 operation timeout이고 이건 connection timeout입니다.
2012.08.16 23:38:39
SocketAddress me = new InetSocketAddress(serverAddr, serverPort);
Log.d("TCP", "C: Connecting...");
System.out.println("socket1");
// Socket socket = new Socket(serverAddr, serverPort);
Socket socket = new Socket();
socket.connect(me,10000);
감사합니다. 해결 된거같습니다.
정확히 10초 후에 catch 처리 하네요.
setSoTimeout(int timeout)
를 한번 활용해 보시죠.