스마트폰 갤럭시S
스마트에서 서버로 서비스 구현해 30초 마다 데이타 전송을 하고 있습니다.
소켓 생성할때 잘 연결되다가 가끔(2-3시간 간격으로) 한번씩 connection reset에러가 납니다.
그리고 실패시 다시 try하면 정상적으로 연결되어 처리됩니다.
이것이 모바일에서 통상적으로 나타나는 현상인지요?
아니면 프로그램을 검토해야 하나요?
소켓은 스마트폰, 서버 둘다 자바로 만들었습니다.
고견 부탁드립니다.
happy님 이미 문제를 해결하셨는지요?
뎃글에 남겨주신 에러로그와 파일들은 보았습니다. 오늘와서보니 지워져있군요;;
한동안 갑회사에서 삽질하느라 짬이 안났는데 혹여 해결안되셨다면 뎃글남겨주세요.
올려주신 파일로 대충 짜집기하여 일단 테스트로 돌려놓았으나 현제 11시~2시 대략3시간동안은 별다른 에러없이 돌고있군요;;
connection reset 같은경우 알아본바로는 서버가 작업처리후 client에게 응답하는과정에서 client가 연결을 미리 끊어버린부분에서
발생한다하여 일단 구조적문제가아닌 요청/응답 에서의 처리부분에 수정이 필요하지 않을까 싶습니다.
연결대기 시간만 늘려줘도 해결되지 않을까하는 생각도 해봅니다만...;; 그건 답이 아니겠지요 일단 해결하셨어도 저역시 궁금한
부분이 있어서 그러니 답글주시면 감사하겠습니다.^^
해결 안되었습니다.
이것 저것 테스트 해보고 있는 중입니다.
컴퓨터에서 에뮬로 돌리면 아무문제 없고 스마트폰으로 했을 경우에만 에러 납니다.
로그를 여러가지로 찍어보고 있는데 에러가 나는 부분이 서버에서 소켓 생성후 스트림에는 값이 다 존재합니다.
// in = new BufferedReader(new InputStreamReader(sub_sock.getInputStream()));
그리고, 리드 라인 str = in.readLine(); 이것을 처리할때 에러후 catch로 떨어집니다.
클라이언트에서 커넥션 실패시 로그->Socket[unconnected]가 찍히면 다시 커넥션 시도 하려 가는데
그다음 2-3번째에서 전송데이타에서 readLine에서 에러가 납니다.
첨부파일은 클라이언트 소켓과 로그 파일을 첨부합니다. (기존파일은 가지고 있으리라 생각합니다)
지금은 클라이언트 소켓에서 커넥션 실패시 잘못된 코드가 있나 보고 있습니다.
참고로 위에 말씀하신 "서버가 작업처리후 client에게 응답하는과정에서 client가 연결을 미리 끊어버린부분에서
발생한다"
이런 현상은 전혀 없습니다.
클라이언트로 넘기는 것은 제대로 보내고 있습니다.
감사합니다.
첨부파일은 잘보았습니다.
일단 저역시 테스트용 소스를 좀더 보강해서 에뮬레이터가아닌 기기에서 돌려볼참입니다.
갤S로 돌려봐야겠네요.
궁금한점이 한가지 있는데 서버의 스팩은 어찌되는지 알고싶습니다.
어제 구글링을 하다 재미있는글을 발견해서요 답글주세요^^
스마트폰이 무선이기에 커넥션이 한번씩 안되는것이 당연한 것인지 이것 부터 의문이 생기고 원래 무선은 그런것인지...
암튼 에뮬에서 4일동안 정상적이고 스마트폰에서는 이런경우라면 케넥션 실패시에 로직을 잘못하고 있는것 같습니다.
그리고, 서버는 개인 PC로 테스트하고 있습니다.
인터넷은 유동아이피 사용합니다.(한달 정도는 안바뀌니까요.아이피 바뀌면 클라이언트 아이피 다시셋팅해서 함)
cpu : 2.20GHZ
Ram : 3GB
좋은 하루되세요.
어제 겔S에 올려서 2시간30분정도 돌리다 말았는데 회사단말에서는 에러가 발생하지 않았습니다.
평일인지라 맘놓고 테스트하기가 힘드네요. 집에는 12시넘어서나 가니원..ㅠㅠ
스펙에 대해서 여쭈어 보았던것은 윈도우 2003인가 2008에서의 버그가 있다는 글을 보았기 때문이였습니다.
10초 딜레이가 생기는 원인 부터 알아보려고 했으나 지금은 짬이 안나서 내일좀봐야겠습니다.
혹여 해결되시면 뎃글로라도 알려주세요^^
10초 딜레이는 클라이언트에서 커넥션 실패시 10초 후에 다시 전송하기 때문에 나타난는 현상이고
정작 문제는 10초후에 다시 가면 2-3번 전송하고 서버에서 에러가 난다는 것입니다.
소켓 프로그램을 클라이언트,서버 처음부터 시간을 갖고 다시 확인해볼려고 합니다.
중요한것은 케넥션 실패시 그다음 처리가 문제가 있는것 같습니다.
해결하기까지는 다소 시간이 (12월쯤)걸릴것 같습니다.
해결되면 다시 올릴테니 가끔 확인해 보세요.
관심을 가져 주셔서 감사합니다.
참고로, 소켓 관련해서 참고할만한 싸이트 구글링 검색했음.
http://www.javaservice.net/~java/bbs/read.cgi?m=devtip&b=servlet&c=r_p&n=968185187
한번 보세요.
수고하새요.
한가지 문의가 있는데요.
회사에서 돌리셨다고 했는데 서버로 사용한 컴퓨터가 고정아이피 인지, 유동아이피 인지 알려주셨으면 합니다.
connection reset에러뿐아니라 대부분의 Exception은 수만은 상황에서 발생할수 가 있습니다...ㅠ
로그와 자세한 상황설명 기타 부분적인 소스 오픈은 필요하다고 생각합니다.
아마도 이와같은 오류를 범하고 계시지 않을까 해서 일단 예측성답변을 해본다면...^^;;
클라/서버 통신구조에서 accept가 떨어지면 Thread를 생성 처리완료후 똑똑한?? CG가 알아서 처리해주는 작업까지만을
염두해두고 구현하신건 아니신가요?? Thread Pooling구조를 사용하고 계신지 궁금합니다.