안드로이드 에뮬레이터 : A                            (어플리케이션의 port는 5110)

에뮬레이터 돌아가는 PC : B                          (IP는 192.168.0.5 , Port Number : 12489) 

네트워크 외부(다른 컴퓨터입니다) PC : C       (IP는 192.168.0.10)

 

라고 하겠습니다.

 

 

 

A에서 TCP나 UDP 서버를 구현하고, C에서 접속할 경우에 대한 질문입니다.

 

B의 command 창에서

 

          telnet local host 5554

          redir add tcp:12489:5110

 

으로 설정했습니다. 또한 command 창에서 stcppipe 프로그램을 사용하여

(칸드로이드의 [하늘구름] 님께서 적어주신 stcppipe의 버그 수정)

 

          stcppipe -b 192.168.0.5 192.127.0.0.1 12489 12489

 

를 실행하였습니다.

 

디버깅 해보니 소켓 연결은 되었고 C가 보낸 데이터를 올바르게 읽었습니다.

 

하지만 C로 데이터를 보내려고 하는데 보내지지가 않습니다.

 

패킷을 캡쳐하는 프로그램을 사용하여 보니 (B의 랜카드를 통과하는 패킷들을 캡쳐)

 

C가 데이터 전송했고 이에 대한 ACK도 보냈던걸 확인하였습니다.

 

그리고 A에서 소켓을 close()할 경우, 이에 대한 패킷과 ack 패킷도 있었습니다.

 

그런데 데이터를 전송하는 패킷은 없습니다. ㅠㅠ

 

 

 

며칠간 열심히 구글링을 해보았는데

 

저와 같은 문제에 대해 질문은 몇개 있지만 명확한 답이 없었습니다. ㅠㅠ

 

찾아보니 redir 하는 것이 only listen만 된다는 말도 있었습니다

 

 

 

TCP나 UDP를 사용하여 에뮬레이터에서 lan을 통한 외부로 데이터를 받는 것과 보내는 것

 

 둘 다 성공해보신분이 계시다면 그때하신 설정을 좀 알려주시면 감사하겠습니다. ㅠㅠ