2012-08-23 2 views
0

이것은 잠시 동안 나를 괴롭 히고 있으며이 문제를 해결하는 방법에 대해 확신 할 수 없습니다.서버가 패킷을 수신하려고 여러 번 시도합니다.

오전 데 문제가 실제로 이것은 패킷

에게 내가 클라이언트에서이 코드를받을 서버 전에 패킷을 밀어 여러 시도를 취할 것입니다 (서버는 동일하지만/수신 보내기는 역)과 서버 문제가 서버 하드웨어, 클라이언트 하드웨어, 안드로이드 프레임 워크, 네트워크, 라우터 설정이나 코드에 있는지 여부를 분리하기 위해 반환 패킷을

class MainTask extends AsyncTask<Void, Void, Void> { 
ProgressDialog progress = null; 
Context context = null; 
    public MainTask(ProgressDialog progress, Context context) { 
    this.progress = progress; 
    this.context = context; 
    } 

public void onPreExecute() {   
    progress.show(); 
    } 

    public Void doInBackground(Void... unused) { 
     // Send UDP Packet 
     String messageStr="Hello Android!"; 
     int server_port = 12441; 
     DatagramSocket s = null; 
     DatagramPacket p = null; 
     InetAddress local = null; 
     Log.i("EyeceBoxService", "Sending packet"); 
     try { 
      s = new DatagramSocket(); 
      local = InetAddress.getByName("192.168.0.4"); 
      int msg_length=messageStr.length(); 
      byte[] message = messageStr.getBytes(); 
      p = new DatagramPacket(message, msg_length,local,server_port); 
      s.send(p); 
      Log.i("EyeceBoxService", "Packet Sent!"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
      // Receive UDP Packet 
     byte[] message = new byte[1500]; 
     try { 
      //progress.setMessage("Retrieving Discovery Information..."); 
      p = new DatagramPacket(message, message.length); 
      s = new DatagramSocket(server_port); 
      Log.i("EyeceBoxService", "Waiting for packet"); 
      s.receive(p); 
      String address = p.getAddress().toString(); 
      Log.i("EyeceBoxService", "Server IP address" + address); 
      //progress.setMessage("Done..."); 
      //MainActivity.buildNotification(context, address); 
      progress.dismiss(); 
      s.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null;  
     } 

    public void onPostExecute(Void unused) { 
    } 
} 
+0

빠른 생각 - 이전에 시작한 별도의 스레드에서 수신을 시도하십시오. 너는 보낸다. 메시지를 보내면 수신자가 설정되기 전에 메시지가 전송 된 것 같습니다. –

+0

그게 가능한거야 그래, 내가봤을 유일한 문제는 그것이 나타날 때까지 기다릴 것입니다 – adam2510

+0

그게 자신의 스레드에 확인해야합니다. –

답변

0

시도를 보낼 패킷에서 클라이언트 IP를 가져옵니다. wireshark, netcat, ipsend와 같은 디버깅 도구를 사용해보십시오. 실제로 보내지는 패킷,받은 패킷, 명령 줄 등을 통해 패킷이 전송되는지 확인하십시오.