모바일 채팅 앱은 IP 변경시 어떻게 연결을 유지하나요?

livey의 이미지

안드로이드 기기끼리 메세지를 송수신하는 앱을 만들어보려고하는데요
궁금한게 있습니다.

서버가 있는 경우는
서버 IP 또는 도메인만 알고있으면 변경된 IP를 서버에게 보내고 상대기기는 서버가 알려주는 IP를 통해 연결을 계속 유지할 수 있을것같습니다.

그러나
서버가 없는 경우에는 안드로이드 기기끼리 직접 연결해서 서버와 클라이언트 역할을 동시에 하게될텐데
문제는
이동하면서 IP 가 수시로 변경될텐데 어떻게 상대방과 연결을 계속 유지 할수 있나요?
각자 기기에 도메인이 할당된것도 아닐텐데 IP가 변경되면 상대에게 변경된 IP를 전달해주게끔 해줄것같은데
만약 변경된 IP 를 상대방이 못받게 되면 서로를 찾지 못하게되서 결국은 연결이 끊기게되지않나요?

이런 문제때문에 서버 없이 1:1로 채팅기능을 구현하기가 어렵겠죠?

위의 내용은 혼자 추측해본 내용인데요 실제로는 어떻게 되는건지 궁금합니다.
조언 좀 부탁드리겠습니다.

jic5760의 이미지

서버없이 클라이언트-클라이언트 통신은 거의 불가능하죠...
LTE망같이 휴대폰인터넷 망은 사설망으로 되어있어서 각각의 휴대폰들은 사설 IP을 받게 됩니다.
따라서 서로 다른 통신사 또는 멀리 떨어져 있는 스마트폰 끼리는 통신을 할 수 없습니다.
그래서 중계서버가 필요한 것이죠...

livey의 이미지

답변 감사합니다 잘 참고하겠습니다~

twinwings의 이미지

자료구조 1(채팅 애플리케이션 서버 전체 정보)(or DB)
---
아이디(문자열) / 고유값(정수)(Primary Key) / ... /

자료구조 2(채팅방 정보)(or DB)
---
고유값(정수)(Primary Key) / IP주소(가변)

이렇게 관리하면 될 듯 한데요?

IP 주소 변경되었다는 것은 클라이언트가 알고있으니

애플리케이션 프로토콜 만들어서 처리하면 될 듯 하고요.

livey의 이미지

흠.. 좀 복잡하네요 ^^;;
아무래도 좀 더 공부를 해야겠습니다..
댓글 감사합니다

MyAbby의 이미지

연결 끊기면 WiFi 나 모바일 네트워크 연결이 있을 때 계속 연결 재시도를 하구요. 서버와 클라이언트의 동기화 매커니즘도 따로 생각하셔야 합니다.
그리고 클라이언트를 IP로 식별하지 마시고 HTTP 세션 쿠키처럼 식별해야 합나다. SHA1 랜덤해시가 제일 무난 할 터이구, 좀 더 고급스럽게 UUID를 사용하셔도 되구요.

같은 네트워크의 클라이언트들을 발견하는 기능이 필요합니다. 토렌트가 이 비슷한 걸로 같은 네트워크에 존재하는 피어들과 통신하죠. IPv4에서는 방송 패킷(뭐 255), v6 에는 로컬에 할당된 특수 주소가 있습니다.
UDP 패킷 계속 날리면서 클라이언트 발견하면 됩니다. 같은 네트워크가 아닌 다른 네트워크의 클라이언트도 발견하기 위해서는 토렌트의 트레커 처럼 중계하는 역할의 프로그램이 필요합니다.

livey의 이미지

제가 너무 쉽게 생각한것같습니다
말씀하신 내용들 잘 이해가 안되네요 ㅠ
좀 더 공부 좀 해야겠습니다 ㅠㅠ
댓글 감사합니다~!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.