[Android] 안드로이드 소켓 통신 시 에뮬레이터에서는 소켓 통신이 잘 되는데 디바이스에서는 안되는 문제

0right·2024년 8월 7일
0

errors

목록 보기
2/2

이번에도 오류 포스팅으로 돌아왔다.
사실 오류인가?를 생각해봤을때 아닌거 같긴 하다.
아무튼...

오류가 나왔던 상황을 정리하자면, 다음과 같다.
1. 안드로이드에서 소켓 통신을 다루고 있었음
2. 에뮬레이터에서는 잘 작동되어 디바이스에서도 잘 작동되는지 확인차 디바이스에서 실행
3. 디바이스에서 "connect failed : ECONNREFUSED" 에러 발생

해결하고자 핸드폰의 포트가 문제인가 봤는데, 문제가 될만한 것은 없었다.
이것저것 구글링을 하던 중 IP 대역이 맞는지 확인해보라는 답변을 발견하였고,
확인해보니 내 디바이스의 대역과 노트북의 대역이 같지 않음을 발견하였다.
(ex. 내 디바이스 대역은 172.20.18.2인데, 노트북의 대역은 10.102.101.135 이었다는 등..)

각각의 IP 주소를 확인하는 방법은 다음과 같다.
1. 디바이스(갤럭시, 안드로이드 10 기준) : 설정- 와이파이 - 현재 잡은 와이파이 오른쪽에 톱니바퀴(설정) 클릭 - IP주소 확인
2. 노트북(우분투 환경) : 터미널에

ifconfig

입력하기

ifconfig를 입력하면 두개~세개정도 뜰텐데, 필자는 두개가 떴고(랜선도 연결되어 있으면 세개 이상으로 뜰 것이다)
그 중에서 lo: 라고 작성된 것 밑에 wlp0s2(혹시 몰라 마지막 세 자리는 안 적겠다)라고 뜨는 칸의 inet을 참조했다.


"그럼 이제 뭘 어떻게 해야하나?"

방법은 쉽다. IP 주소를 변경하면 된다.
둘 중 하나만 바꿔도 되는데, 필자는 터미널이 편해서 터미널로 변경하였다.
IP 주소를 바꾸는 명령어는 다음과 같다.

$ sudo ip addr flush dev wlp0s2
$ sudo ip addr add 172.20.18.3 dev wlp0s2
$ sudo ifconfig wlp0s2 netmask 255.255.255.0
$ sudo ip link set dev wlp0s up

위 순서대로 적으면 된다.
하나하나 설명하자면,

첫번째 줄 - wlp0s2 대신 ifconfig를 했을 때 나왔던 값을 참조한다.
두번째 줄 - IP 주소의 경우 휴대폰 디바이스에서 찍힌 IP 주소와 비슷하지만 같지 않게 한다. 필자는 맨 끝자리만 +1을 하였다.
세번째 줄 - 밑에서 설명. 미리 말하자면 넷마스크가 같지 않으면 아무리 IP 대역이 같아도 통신이 안된다.
네번째 줄 - 상태를 up 시키는 동작

으로 하고

ping {휴대폰 디바이스에서 찍혀있는 IP 주소}

을 하면 통신이 잘 될 것이다.
.
.
.

하지만 필자는 이렇게 했음에도 처음부터 잘 되지 않았다.
이유는 세번째 줄에서 넷마스크 설정 때문이었는데, 넷마스크가 달랐기 때문이다.
넷마스크를 설정하기 위해선 우선 휴대폰 디바이스에서 아까 IP 주소를 보았던 페이지로 가야한다.
이 페이지 밑에 고급이란게 있을텐데, 여기서 DHCP를 누르고 고정으로 변경하면 IP주소, 게이트웨이 등을 바꿀 수 있는 페이지가 나온다.
봐야할 것은 네트워크 식별자 길이이다. 식별자 길이 설정은 찾아보면 많이 나오니까 여기서는 생략하도록 하겠다.
필자는 255.255.255.0 으로 설정하는 길이인 24로 설정한 후 저장하였다.

여기까지 한 다음 위에서 했던 것 처럼 ifconfig를 한 다음 넷마스크가 휴대폰에서 한 것과 다르면 변경하면 된다.

이렇게 하면 잘 될 것이다!

profile
대학원생입니만

0개의 댓글

Powered by GraphCDN, the GraphQL CDN