안드로이드 개발 질문/답변
(글 수 45,052)
만드려고 하는 앱이
백그라운드에서 실행중에 특정 메시지가 오면 답을 해주는 것인데
그래서 서비스와 브로드 캐스트를 이용해서 휴대폰이 켜지면 서비스가 시작되도록 했습니다.
그런데 문제는 특정 메시지를 대기하기 위해 서비스에서 소켓통신으로 연결이 되어 있습니다.
연결이 되어있는데 서버로 메시지를 보내려고 하면 에러가 발생하게 됩니다.
tcp.java <- 서비스 소스 (스레드 동작 중)
main.java <- 여기서 서버로 메시지를 보내는 창을 만들었는데 에러가 발생합니다.
동작중인 스레드에 메시지를 보낼 수 있는지 아니면 소켓을 또하나 만들어서 해야 하는지
방법을 모르겠습니다.
또한 소켓으로 계속 연결하게 되면 포트번호 때문에 여러 클라이언트가 서버에 접속 못하는 문제가
생길거 같은데 제가 원하는 건 단지 프로그램이 백그라운드에서 작동하다가 특정 메시지가 오면
답을 해주면 됩니다. 구지 소켓으로 하지 않아도 될 것 같은데 방법을 모르겠습니다.
세 번째로 여러대의 클라이언트(안드로이드 폰)이 서버에 접속했을 때 다시 답변을 돌려주어야 하는데
각각의 폰을 구분하는 방법은 무었이 있을지요..
꼭 답변 부탁드립니다




저도 최근에 비슷한 어플을 공부하고 있어서..몇자 적습니다.(근데 제가 독해력이 떨어져서 ㅋㅋ 내용이 같은건진 모르겠네요.)
일단 서버에서 클라이언트로 메세지를 보내는 방법은 크게 세가지가 있구요.
1. ServerPush:짐 사용하시는 방법입니다. 소켓등으로 서버와 지속적으로 연결
2. Client Polling:클라이언트가 일정주기나 혹은 이벤트 발생시 서버에 접속해서 직접 메세지를 얻어갑니다.
3. C2DM:검색해보시면 됩니다. -_-;;
C2DM이 젤 깔끔하긴 하지만 메세지가 누실될 가능성이 굉장히 커서...
전 2번의 방법으로 개발했구요.
서버도 소켓등으로 복잡하게 구현할 필요없이 jsp같은 서버페이지와 사용자 정보와 보낼 메세지를 담은 디비정도로 구성했구요.
어플 최초 가동시 인증절차를 통해 휴대폰 번호나 혹은 유니크한 값을 부여해주고 그 값은 휴대폰에 저장해두고...
(물론 이값도 서버에도 저장해둬야겠죠.)
서버페이지 접속시마다 저 값으로 긁어갈(?) 데이터를 판별해서 긁어가서 노티로 알려줬습니다.