같은 폰에 어플두개로 연결(192.168.1.x)은 되지만 외부(동일 공유기의 다른폰이나 pc) 에서는 안되고있습니다.
텔넷도 무반응인데요.. 혹시 단말 내부에 방화벽이 있다라던가
외부 소켓 연결시 권한이라던가가 있는지 도움 부탁드립니다.
외부(같은 공유기 내부의 다른폰이나 pc)에서는 안열립니다.
단, 같은 공유기에 물린 PC에서만 됩니다.
휴대폰의 IP를 확인해 보세요.
android.permission.INTERNET 퍼미션 외에 다른 것은 필요없습니다.
저는 모토로이에서 안되고있어서 혹시 어떤 단말에서 성공하셨는지요?
(혹시라도 제조사에서 막았을까도 싶어서요..)
어떤 포트로 성공하셨나요? 저는 3165포트를 해보고있습니다.
(혹시 포트대역문제인가도 싶어서요..)
이 외에 다른 포트도 테스트해보니 잘 됩니다.
혹시 해당 포트가 다른 프로그램에서 이미 사용중 일 수도 있으니 포트 번호를 바꿔가며 테스트해보세요.
TCP기반 연결은 잘될겁니다. UDP기반은 안될 겁니다.
안드로이드 폰의 IP는 정상적으로 받아올지라도 , 포트 번호가 수시로 변경됩니다. 즉, 패킷을 보낼때마다 변경이 됩니다.
따라서 프로그램에서 패킷을 수신할려고 해도 보내는 쪽에서 포트번호를 모르기 때문에 ,
다시말해서 , 안드로이드 쪽 프로그램에서 서버로 포트 6000번을 통해 전송을 하고 다시 안드로이드 폰 포트 6000번으로받고자 해도
서버쪽에서 수신한 메세지의 포트는 6000이 아닌 다른 값으로 들어옵니다. 따라서 서버는 이 다른 값으로 보내야 하지만 , 서버에서는 6000번으로 안드로이드 폰으로 보내면 폰에서 수신이 안되게 되는 것입니다. 또한 폰의 포트번호는 시간에 따라 2-3초에 한번씩 자동으로 변합니다.
다음은 제가 폰에서 서버로 보내 캡쳐한 화면입니다. 폰에서는 서버의 6000번 포트로 보내도록 하였습니다.
IP : /175.223.3.54:17337
IP : /175.223.3.54:17337
IP : /175.223.3.54:17337
IP : /175.223.3.54:17337
IP : /175.223.3.54:17337
IP : /175.223.3.54:17337
IP : /175.223.3.54:17337
IP : /175.223.3.54:17337
IP : /175.223.3.54:17337
IP : /175.223.3.54:20879
IP : /175.223.3.54:20879
IP : /175.223.3.54:20879
IP : /175.223.3.54:27571
IP : /175.223.3.54:27571
IP : /175.223.3.54:27571
IP : /175.223.3.54:31344
IP : /175.223.3.54:31344
IP : /175.223.3.54:16028
IP : /175.223.3.54:16028
IP : /175.223.3.54:28670
IP : /175.223.3.54:28670
IP : /175.223.3.54:28670
IP : /175.223.3.54:15960
IP : /175.223.3.54:15960
IP : /175.223.3.54:15960
IP : /175.223.3.54:15960
콜론 다음이 포트 번호 입니다. 서버에서는 저 포트 번호로 순간순간 보내야 제대로 받아 먹습니다.
서버쪽에서 보내는 프로그램은 그래서 다음과 같이 바로 전에 받은 패킷의 포트 번호를 기반으로 보내주도록 해야 합니다.
DatagramPacket sendPacket = new DatagramPacket(receivePacket.getData(), receivePacket.getData().length,receivePacket.getAddress(), receivePacket.getPort());
dsock.send(sendPacket);