다음과 같이 서버컴퓨터에 공유기가 2개(A,B) 물려있다고 가정해볼께요 !
Client ------------- 공유기A -------------- 공유기B ---------------- Server
175.200.173.127 192.168.0.2 192.168.1.7
클라이언트와 서버를 연결시키려고 합니다.
socketServer.java
ServerSocket serverSocket = new ServerSocket(5000); //서버 (포트 5000번 대기)
socketClient.java
Socket socket = new Socket("175.200.173.127", 5000); //클라이언트 (175.200.173.127:5002 접속)
클라이언트가 175.200.173.127
:5000
에 연결하면
서버에 연결되는 것이 아닌 공유기A의 5000번 포트
를 찾는 것입니다.
클라이언트가 서버까지 가려면 어떻게 해야 할까요?
포트포워딩을 이용하자.
포트포워딩은 외부포트,내부포트를 미리 기입하여
클라이언트가 접속시 외부포트를 내부포트로 매핑시켜준다.
(포트는 안쓰는포트를 이용해야겠죠?)
안쓰는 포트찾는건 여러분의 구글링에 맡기겠습니다. 죄송해요
Do it!
자. 그럼 공유기A에 환경설정의 포트포워딩으로 들어가서
외부포트 5002 , ip : 192.168.1.2 , 내부포트 5001 을 기입해줍니다.
다음과 같이 맵핑되었습니다.
175.200.173.127
:5002
=> 192.168.0.2
:5001
클라이언트가 175.200.173.127
:5001
으로 접속하면
192.168.0.1
:5001
으로 접속한 것 입니다.
포트포워딩 성공!
이제 끝난건가요?
아닙니다. 포트포워딩 한번으로,
클라이언트는 192.168.1.7
:5000
까지 찾아올 수 없습니다.
우리는 192.168.0.1
:5001
과 192.168.1.7
:5000
을 연결시켜줘야합니다.
어떻게 ? 포트포워딩으로 !
한번더 포트포워딩! Do it again
앞에 했던 방식 그대로 한번 더 해주시면 됩니다.
공유기B에 환경설정의 포트포워딩으로 들어가서
외부포트 5001 , ip : 192.168.1.7 , 내부포트 5000 을 기입해줍니다.
이제 클라이언트가 175.200.173.127
:5002
로 접속하면
192.168.1.7
: 5000
로 접속할 수 있습니다.
공유기가 3개라면 한번더 반복하시면됩니다.. 참 쉽죠?
클라이언트 구현없이 서버포트 열려있는지 확인하는법
(확인하기 전에 이 작업부터 해줍시다)
Tip 1. 공유기 적용시키려면 재시작눌러야합니다.
고급설정 - 시스템관리 - 기타설정에서 재시작 누를 수 있습니다.(iptime)
공유기 2개 모두 재시작해야 하겠죠 ?!
Tip 2. 서버IP가 유동ip라면 DDMS를 하거나 고정ip로 바꿔주는것이 낫습니다.
서버 IP가 계속 바뀐다면 포트포워딩을 계속 해줘야하겠죠?
귀찮으니 서버IP를 고정ip로 바꾸거나 DDMS를 이용합시다.
이제 정상적으로 열려있는지 확인해볼까요?
위의 링크를 클릭하시면 서버포트가 열려있는지 확인해주는 사이트가 뜹니다.
저의 경우는 175.200.173.127
, 5002
입력 시
사진처럼 초록깃발이 떠야합니다.
빨간깃발이 뜬다면 원인 3가지를 생각해볼 수 있습니다.
-
방화벽
에서 5000번 포트를 막음! -
서버의 포트
가 닫혀있음!
(CMD에서 netstat -ano 입력해서 5000번 포트가 대기중인지 확인하기) -
공유기설정
이 잘못됨!
소켓 프로그래밍 공부하다가 친구를 클라이언트로 하다보니 포워딩을 해야 되었습니다.
컴퓨터네트워크 수업 때 열심히 들었는데 다 까먹었습니다ㅠ
미래에 포워딩을 하게 될 나를 위해, 여러분들에게도 조그만 도움이 되고자 글을 남깁니다.
그럼 20000~