안드로이드에서 socket 을 써서 C++ server 와 통신중인데요.
모바일 특성상 소켓이 끊어질 일이 많은데요.
소켓 끊어지는것을 감지를 못하겠어요.
끊어지면 타이머를 써서라도 계속 다시 연결하여 로그인 시켜야 하는 채팅 앱인데요.
좋은 방법이 없을까요.
여기서 말씀하시는건 비정상적인 연결 해제를 말씀하시는거겠죠?
여러경우가 있겠는데.. 크게 2가지 경우로,
스마트기기에서 네트워크 신호가 잡히지 않는다는 신호가 뜰때와
(테스트 해볼수 있는 방법으로는 wifi 공유기에서 전원선을 빼거나 스마트 기기의 와이파이/3g/4g를 껐을때)
스마트기기가 네트워크가 연결되었다고 인식은 하는데, 실제로 네트워크 연결이 되지 않는 경우가 있습니다.
(서버가 갑자기 죽었다던가, 무선 네트워크 중계기에 라인에 문제가 있다던가.. 등등,
테스트 해볼수 있는 방법으로는 wifi 공유기에서 랜선을 뺏을때)
전자의 경우 socket의 read(), write() 에서 SocketException,IOException 이 발생하기 때문에 이를 처리하시면 될듯합니다.
하지만 후자의 경우 스마트기기에서 네트워크가 연결 되었다고 인식하기 때문에, read 나 write 에서 문제가 발생하지 않습니다.
그렇기 때문에 일반적으로 서버와 클라이언트간 연결 유지에 대한 정보를 위해서 Heart beat 메카니즘을 별도로 구현을 합니다.
살아있다는 정보만을 담은 Alive 패킷 통해 서버와 클라이언트가 서로 주기적으로 통신하는 방법을 말합니다.
만일 일정 시간이상 alive 패킷을 받지 못한다면, 연결이 해제되었다고 인식하고 재연결과 같은 예외처리를 하게 됩니다.
Heart beat, alive packet 이라는 키워드로 검색을 해보시면 많은 정보를 얻을수 있을것 같네요.
로그인 유지
여기서 말씀하시는건 비정상적인 연결 해제를 말씀하시는거겠죠?
여러경우가 있겠는데.. 크게 2가지 경우로,
스마트기기에서 네트워크 신호가 잡히지 않는다는 신호가 뜰때와
(테스트 해볼수 있는 방법으로는 wifi 공유기에서 전원선을 빼거나 스마트 기기의 와이파이/3g/4g를 껐을때)
스마트기기가 네트워크가 연결되었다고 인식은 하는데, 실제로 네트워크 연결이 되지 않는 경우가 있습니다.
(서버가 갑자기 죽었다던가, 무선 네트워크 중계기에 라인에 문제가 있다던가.. 등등,
테스트 해볼수 있는 방법으로는 wifi 공유기에서 랜선을 뺏을때)
전자의 경우 socket의 read(), write() 에서 SocketException,IOException 이 발생하기 때문에 이를 처리하시면 될듯합니다.
하지만 후자의 경우 스마트기기에서 네트워크가 연결 되었다고 인식하기 때문에, read 나 write 에서 문제가 발생하지 않습니다.
그렇기 때문에 일반적으로 서버와 클라이언트간 연결 유지에 대한 정보를 위해서 Heart beat 메카니즘을 별도로 구현을 합니다.
살아있다는 정보만을 담은 Alive 패킷 통해 서버와 클라이언트가 서로 주기적으로 통신하는 방법을 말합니다.
만일 일정 시간이상 alive 패킷을 받지 못한다면, 연결이 해제되었다고 인식하고 재연결과 같은 예외처리를 하게 됩니다.
Heart beat, alive packet 이라는 키워드로 검색을 해보시면 많은 정보를 얻을수 있을것 같네요.