2010-07-09 2 views
1

TCP 소켓을 통해 두 개의 Android 장치 (2.1)를 연결하려고했습니다. 코드의 핵심 부분 :두 개의 안드로이드 장치를 TCP 소켓을 통해 연결합니다.

서버 : ServerSocket serverSocket = 새 ServerSocket (SERVERPORT);

클라이언트 : 소켓 소켓 = 새 소켓 (serverAddr, SERVERPORT);

이상한 일은 클라이언트가 에뮬레이터 인 경우 작동하도록 만들 수 있지만 실제 장치에서 둘 다 실행하면 동일한 코드가 실패합니다. 클라이언트 측에서 실패는 다음과 같습니다


java.net.SocketException: No route to host 
    at org.apache.harmony.luni.platform.OSNetworkSystem.connectSocketImpl(Native 
Method) 
    at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem. 
java:114) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java: 
245) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java: 
220) 
    at java.net.Socket.startupSocket(Socket.java:780) 
    at java.net.Socket.(Socket.java:314) 

내가 너무 WIFI 및 모바일 그물 시도가 동일한 서브넷에 두 번했다, 인터넷 권한이 주어 서버는 실제 192.168 .. IP를 통해 해결됩니다 .
setCustomSocketImplFactory()를 사용하여 소켓 구현을 변경하려고합니다.
문제는 안드로이드에 MSRP 프로토콜을 구현하는 과정에서 중요합니다.
누군가 나에게 조언을 해줄 수 있습니까?

+0

프로그램이 두 개의 휴대 전화에서 실행중인 경우 실제 IP 무엇을 의미합니까? –

+0

난 그냥 문제가 내가 실제 장치에 대한 10.0.2.15 IP를 사용하지 않는다고 말하려고했습니다. – Diepie

답변

1

공개적으로 라우팅 가능한 IP 주소가있는 휴대 전화는 거의 없습니다. 대부분 NAT 뒤에 있습니다.

대신 C2DM을 사용하는 것이 좋습니다 :

http://code.google.com/android/c2dm/

+0

제안을 주셔서 감사합니다. NAT를위한 RFC 호환 솔루션이 있으므로, 라우팅 가능 IP 주소는 필요 없습니다. 순회 (STUN, TURN, ICE 등). – Diepie

관련 문제