Open woorinarada opened 12 years ago
TCP 연결을 위해서는 연결 대상의 IP주소와 port번호가 필요하다.
NDS를 AP(공유기)를 통해 인터넷에 접속하는 경우 외부에서 NDS로 접속할 경우 NDS에서 소켓 을 listen()을 이용하여 접속 대기했을때, NDS에서 확인 가능한 정보는
위 두 가지를 확인할 수 있지만
AP 외부에서 접속할 경우 접속하는 PC에서 필요한 정보는
AP로 접속 후 AP내부 IP와 내부 port번호를 이용하여 TCP접속하는 방법도 있다. SSID를 활용한다고 한다. 나중에 검색해서 적용시켜 보도록 하자.
위에서 언급한 SSID를 이용한 접근 방식은 AP로 접속 후 AP의 내부IP를 이용하여 접근하는 방식을 말한다. 활용방법은 좀 더 알아보아야 할 것 같다.
현재 중점적으로 연구하고 있는 방식을 정리하자면
이 방법은 구현에 있어서 큰 문제는 없으며, 기존에 완성되어 있는 TCP를 이용한 PC->DS로 파일을 전송하는 프로그램(Wifidown)을 약간만 수정하면 구현이 가능하다. 단점으로는 서버의 트래픽이 상당히 많이 발생하게 된다.
이전 방법에서 언급했던 트래픽 문제를 최소화 하기 위한 아이디어다. 현재 이 방법을 연구하는데 있어서 문제점은 DS로 접근하기 위해서는 DS가 접속되어있는 AP의 IP주소와 AP가 포트포워딩으로 변환한 DS가 listen을 시켜둔 소켓의 포트번호를 알아야 하는데, AP의 IP주소는 서버쪽에서 DS가 connect한 소켓의 정보를 조회하는것으로 얻을 수 있지만, listen을 시켜둔 포트번호를 알아내는 방법을 알지 못하고 있다. listen-connect방향의 전환 역시 PC가 별도의 AP를 통해 접속중인 상태라면 동일한 문제가 발생하게 된다.
이를 일단 보완할만한 방법으로로 제시하는 아이디어는
UPnP 기술을 응용하면 된다는 조언을 받았습니다. 이후 추가해 보겠습니다. 홀펀칭 기법을 응옹하라는 조언을 받았습니다.
master branch/psp-send/psp_msg_loop에 일단 실험코드 작성중인 내용을 업데이트 했습니다. PC1, PC2에서 SV로 connect한 후에 PC2에서 listen을 열어둔 소켓의 port번호를 SV를 거쳐 PC1으로 전송하고 이를 이용해 PC1에서 PC2로 접속하는 방식입니다.(전전 코멘트 에서 두번째 참고) 현재 동기화 문제때문에 작동이 안되는 코드입니다. read했을때 read한 내용을 check해서 필요로 하는 메세지가 올때까지 while 루프를 돌리는 방식으로 동기화를 맞출 예정입니다.
master branch/psp-send/ver-SV_CL_OK 실습용 중계서버를 이용한 파일전송 코드가 있습니다. 서버를 켜는곳에 따라 /psp-send/ver-SV_CL_OK/wifidown/source/download.h 위 파일에서 DOWNLOAD_PORT, DOWNLOAD_IP 를 서버프로그램을 작동시킨 PC에 맞게 수정하시고 wifidown 디렉토리에서 make 명령 쳐 주시면 됩니다. 사용법은 서버가 켜진상태에서 -DS에서 wifidown 실행 -DS콘솔에 출력되는 서버의 IP, port를 확인 -client 폴더에 있는 pc 바이너리를 실행 ./pc [파일명] FXD [서버IP] [서버port] 순으로 명령어를 쳐 줍니다. -client쪽 콘솔에서 파일 전송 완료 명령이 나오면 -DS의 A버튼을 눌러주시면 다운로드 완료.
현재 서버 프로그램에서 이슈는 두가지가 있습니다.
처리해야 할 사항이 명확해지면 별도 이슈로 분리하겠습니다.
NDS를 이용한 임베디드 실습을 할 때,
위 작업을 할 경우 NDS와 실습자의 PC간의 연결이 필요한데, NDS에서는 Wifi를 통한 소켓통신을 지원한다.
이 경우 실습자의 PC에서 무선랜을 이용하여 접속하지 않을 경우, 실습자의 PC에서 외부 AP에 접속되어 있는 NDS로의 소켓 접속을 어떻게 하는가의 문제가 생기게 된다.
이를 편리하게 해결할 수 있다면 NDS를 이용한 프로그램 개발시 편이성이 대폭 증대될 것으로 기대된다.