2012-05-23 2 views
0

내 Client.class로만 패킷을 보낼 수 있지만 Server.class로 패킷을받을 수 없습니다. 클라이언트와 서버는 각각 두 개의 스레드에 있습니다. MainActivity을 업데이트하려면 처리기를 사용합니다. 핸들러는 작동하지만 (테스트 한) Server.class는 작동하지 않습니다.안드로이드 앱에서 UDP 패킷을 수신 할 수 없음

public class Client implements Runnable { 

    //@Override 
    public void run() { 
     do{ 
      try { 
        InetAddress serverAddr = InetAddress.getByName(Server.CLIENTIP); 

        DatagramSocket socket = new DatagramSocket(); 

        byte[] buf = ("Test").getBytes(); 

        DatagramPacket packet = new DatagramPacket(buf, buf.length,serverAddr,Server.CLIENTPORT); 

        socket.send(packet); 
       }  
      catch (Exception e) {} 
     } 
     while(open == true); 
    } 
} 

public class Server implements Runnable { 

public static String CLIENTIP = "192.168.0.13";//send-ip 
public static String SERVERIP = "10.0.0.18";//receive-ip 
public static final int CLIENTPORT = 5000; //send-port 
public static final int SERVERPORT = 5001; //receive-port 

//@Override 
    public void run() { 
     do 
     { 
      try { 
       DatagramSocket socket = new DatagramSocket(SERVERPORT); 

        byte[] buf = new byte[256]; 
        DatagramPacket rpacket = new DatagramPacket(buf, buf.length); 

        socket.receive(rpacket); 

        String x = new String(rpacket.getData()); 
        MainActivity.glText = x;   
        MainActivity.mHandler.post(MainActivity.mTimer); 

       } 
      catch (Exception e) {} 
     } 
     while(open == true); 
    } 
} 

누구나이 문제에 대한 해결책이 있습니까? 귀하의 답변 주셔서 감사합니다! ;)

답변

1

붙여 넣은 코드를 사용하여 통신하려고 시도하는 경우와 다른 포트 번호로 수신 대기 중입니다.

당신이 (생략 기본 주소 인) localhost 주소로 결합되어 있기 때문에 쉽게 장치 외부에서 서버에 연결할 수 없습니다 :

DatagramSocket socket = new DatagramSocket(SERVERPORT); 

당신은 주소로 바인드해야 도달 할 수 귀하의 PC에서 :

DatagramSocket socket = new DatagramSocket(SERVERPORT02, 
         InetAddress.getByName(SERVERIP)); 
+0

빠른 대답 감사드립니다. 안드로이드 플랫폼과 내 컴퓨터 사이에서 테스트로 의사 소통하고 싶습니다. 내 컴퓨터의 IP 주소는 192.168.0.13이고 내 플랫폼은 IP 10.0.0.18입니다. 내 컴퓨터의 설정은 send-port = 5001/receive port = 5000이고 Andoird-Plattform send-port = 5000/receive-port = 5001입니다. Client.class가 작동 중입니다. 하지만 컴퓨터에서 아무 것도받을 수 없습니다. 코드에서 무엇을 변경해야합니까? 고마워;) – Chris

0

에뮬레이터를 사용하고 있습니까? 그렇다면 에뮬레이터가 패킷을 수신 할 수 있도록 포트를 전달할 수 있습니다. 동일한으로 에뮬레이터로 수신 포트 (5001)로 UDP 패킷을 전달하도록 추가 REDIR :: 예

, : 장치 에뮬레이터 과 형식을 REDIR 명령을 사용하는 호스트의 포트 리디렉션하기 위하여

포트를 사용하면 다음을 사용할 수 있습니다. redir add udp : 5001 : 5001

+0

예, 저는 에뮬레이터를 사용하고 있습니다. 나 자신의 컴퓨터와 안드로이드 에뮬레이터를 연결하고 싶다. "redir add udp : 5001 : 5001"을 사용했습니다. 그 후 컴퓨터와 에뮬레이터 간의 연결이 작동하고있었습니다. 안드로이드 에뮬레이터에서 컴퓨터로 정보를 보낼 수는 있지만 컴퓨터에서 정보를받을 수는 없습니다. :(다른 생각이 있습니까?) – Chris

+0

아니오, 거기에 어떤 문제가 있는지 모릅니다. 포트 포워딩을 시작하면 양쪽 포트 모두에서 효과가있었습니다. 동일한 포트로 보내면 어떻게 될까요? – MikeIsrael

+0

아무 것도 없습니다. .. 이제이 방법으로 모든 것을 바꿨습니다 (http://www.helloandroid.com/tutorials/simple-udp-communication-example). 그러나 나는 항상 안드로이드 에뮬레이터에서 정보를받을 수 없습니다. Log.d ("test", "test")는 s.receive (p) 뒤에 있습니다.하지만이 위치에 도달 할 수없는 것 같습니다. 안드로이드 에뮬레이터에서 하나만 설정하면됩니다. 포트 (예 : 5001) 및 컴퓨터 (udp-test-programm)에서 포트 2 개를 설정해야합니다. 대상 포트 29392의 의미는 무엇입니까? (답변 해 주셔서 감사합니다) – Chris

관련 문제