티스토리 뷰


졸업작품의 완성을 위해 안드로이드 기기간 (스마트폰-스마트폰) 소켓 통신 코드를 짜보았다.


코딩 중에 있었던 문제는 byte[] 형태의 데이터를 원하는 형태로(String)으로 복구하는 것이었는데

이 부분에 대한 이해가 부족해서 해결은 못하였다. 

대신 버퍼 변수를 사용하지 않아도 되는 다른 메소드 (readUTF, writeUTF)를 찾아서 문자열을 표현하였다.


그리고 가장 큰 문제는 전송이 안된다는 점..

이 부분은 수많은 시행착오로 해결하였고, 가장 큰 실수는 스레드를 정의만하고 start() 메소드를 사용하지 않았다는 점이었다....

아무튼 고생 끝에 완성한 프로그램의 화면은 다음과 같다.




1. 선택화면





2. 서버 화면, start 버튼을 누르면 클라이언트를 기다린다. 서버포트번호는 5555




3. 클라이언트 화면, 서버 접속 버튼을 누르면 아래의 IP 주소로 접속한다. 서버포트번호는 5555



댓글
  • 프로필사진 비밀댓글입니다 2013.10.14 11:23
  • 프로필사진 doublemetal http://dev.naver.com/projects/cbnu01/download/7956?filename=TestScoket%20-%200816.zip

    서버쪽에서 먼저 스타트 버튼 누르고 클라이언트에서 서버접속
    버튼 누르면 될겁니다.
    2013.11.04 10:35 신고
  • 프로필사진 비밀댓글입니다 2013.11.12 00:28
  • 프로필사진 doublemetal 안드로이드간 통신인가요??
    중요한게 서버프로그램 실행시키는 장치의 아이피주소가 공인아이피인가 사설아이피인가인데... 어찌되었던 테스트하실거라면 공유기 사용하실거라 생각하고 같은 공유기(AP) 신호 받아서 인터넷을 접속하면 소켓통신이 되어야 정상입니다...
    2013.12.06 00:34 신고
  • 프로필사진 doublemetal 그리고 아이피주소부터 환경설정 잘 살펴보세요... 기본적인 인터넷 퍼미션을 주지 않았다던가, 액티비티를 등록 안한 경우도 봤고, 저 같은 경우는 방화벽이나 기기 자체 문제로 고생한 경험도 있습니다..
    아무튼 답장이 늦어서 죄송하네요...
    2013.12.06 00:38 신고
  • 프로필사진 비밀댓글입니다 2014.01.01 16:03
  • 프로필사진 안되서 슬픈자 파일을 다운받아 두개의 안드로이드 폰에 설치하고 서버시작시키고 클라이언트 서버접속후

    메세지 보내기를 하면 오류로 그냥 나와버리네요

    혹시 환경설정 부분에서 검토해보아야 할부분이 무엇들이 있는지 알수 있을까요?

    ip주소는 현재 공유기 ip주소로 수정하여 사용하였고 포트번호는 똑같이 5555를 넣었습니다.
    2014.03.07 17:16
  • 프로필사진 doublemetal 일단 죄송하다는 말을 드리고 싶네요..
    제가 잘 만들었어야 하는데 ㅠ;
    제 코드를 너무 믿지 마시고.. (저도 제 코드를 믿지 못하겠습니다...)
    참고용으로만 봐주시고 하나하나 코딩을 해보시라고 권하고 싶습니다.

    도움을 드리자면 안드로이드는 메인스레드(UI관련)에서 네트워크 작업을 못하게 되있으므로 저는 Handler를 사용해서 메시지가 오면 텍스트박스의 내용을 바꾸게 코딩을 했던 것으로 기억하는데 그 부분을 유의하시기 바랍니다. (setText 메소드가 UI와 관련되어 있죠?)
    2014.03.07 18:19 신고
  • 프로필사진 김희수 저도 스마트폰간의 통신으로 연구했던 학생입니다 궁금한점이 있는데 위와 같은 경우 동일 공유기가 아닌 3g통신으로도 양방향 통신이 가능한건가요?
    2014.04.07 11:40
  • 프로필사진 doublemetal 현재 모바일기기들은 모두 중계기에서 할당 받은 사설아이피를 사용합니다(아마도). 그렇기 때문에 3g 환경에서는 제 글에 있는 소스를 가지고 양방향 통신이 되질 않습니다. (운 좋게 같은 망 내의 사설아이피를 받는 다면 가능할지도 )
    예전에 저도 같은 주제로 고민을 했었는데 해당 이슈를 해결할 기술이 몇가지 있는 것으로 압니다.
    온라인게임을 개발할때 쓰는 아이피펀칭? 이라는 기술도 있다고하는데 각설하고, 릴레이서버를 개발하는 게 현실적일 거 같습니다. 공인아이피를 가진 서버가 2대의 모바일기기를 중계해주는 거죠. 학구열이 충만하신분이라면 공부해보시는 것도 좋겠습니다. 더 알려드리고 싶지만, 저도 시간에 쫓겨 포기한 부분이라 그러지 못하겠네요. 힘내요!
    2014.04.07 20:42 신고
  • 프로필사진 sigma 저 위의 쏘스 너무 도움이 많이 되었습니다. 현재 조금 응용중인데 잘 작동은 됩니다. 그런데 접속을 한 번 끊은 후 다시 재 접속을 하면 다시 접속이 안되는데 어떤 부분을 설정이나 수정을 해 주어야 할까요? 2014.05.16 01:42
  • 프로필사진 개발자 소켓 프로그래밍을 하기 위해서
    Socket이나 InputStream 같은 클래스들을 썼을 것인데
    요놈들을 초기화해주면 될 겁니다. null이든 새로운 객체를 넣어주든
    저는 그런 고민 안하고 막 코딩 했었네요^^;; (죄송;)
    2014.05.19 14:15
  • 프로필사진 개발자 그리고 접속을 끊을 때도 정상적으로 종료되는 코드인지 확인이 필요하구요. 2014.05.19 14:15
  • 프로필사진 공부중 혹시 ip주소를 어떤걸 입력해야하나요 저같은 경우는 서버ip주소를 그냥ipip.kr에서 안드로이드 스마트폰의 ip주소를 입력하였는데
    제가 와이파이를 쓰고있는데 혹시 그 ip주소를 입력해야하나요?
    2015.04.26 17:38
  • 프로필사진 doublemetal 서버로 쓰실 스마트폰의 ip가 ip가 공인이라면 그대로 쓰시면 됩니다.
    사설이어도, 같은 사설 네트워크 안의 장비라면 가능하고요.

    저는 제가 소유한 공유기의 네트워크 안에서 통신할 목적이었기 때문에 공유기로부터 할당 받은 192.168.0.2(서버용 스마트폰의 ip)을 사용하였습니다. 같은 네트워크에 속한 192.168.0.3(클라이언트 스마트폰의 ip)로 서버와 통신이 가능합니다.

    공유기를 iptime을 사용하는 경우 위에서 언급한 ip는 자동으로 할당되는 값이므로 바뀔 수 있습니다. 혹은 임의로 지정도 가능합니다.

    어쨌든 중요한 건 서로 통신을 하기 위해서는 인식 가능한 ip주소가 필요하다는 거죠.
    2015.04.29 14:40 신고
  • 프로필사진 공부중 안녕하세요. 답변 감사드립니다! 근데 실행할때 클라이언트에서 서버접속을 누르면 서버측 기기 앱이 그냥 중지되면서 꺼지는데 왜 이런걸까요? 2015.05.18 17:49
댓글쓰기 폼