2016-10-27 6 views
0

특정 포트에서 특정 IP 주소로 데이터를 보내려고합니다. 하드웨어 장치로부터 응답이 없습니다. 아래 코드는 내 코드입니다. 똑같은 일은 iOS에서 제대로 작동합니다. 그러나 androidd tt는 소켓 타임 아웃 예외를 던지고 있습니다.android에서 UDP를 사용하여 특정 IP 및 포트로 데이터를 보내고받습니다.

DatagramSocket sendSoc = null; 
      DatagramPacket packet = null; 
      try { 
       sendSoc = new DatagramSocket(WIPHONEPORT);//2739 
       sendSoc.setBroadcast(true); 
       sendSoc.setSoTimeout(5000); 

       InetSocketAddress address = new InetSocketAddress(InetAddress.getByName(deviceSignature.getDeviceIP()), WIPHONEPORT); 

       byte[] ip = object.ToBuffer(); 
       Log.d("data", ip.length + "##" + Arrays.toString(ip)); 
       packet = new DatagramPacket(ip, 
         ip.length, address.getAddress(), address.getPort()); 

      } catch (IOException e) { 
       Log.d("error","could not able to send packet"); 
       return; 
      } 


      WiphoneProp prop; 
      boolean canLoop = true; 
      int i = 0; 
      //////////// 
      while (canLoop) { 
       try { 

        sendSoc.send(packet); 
        try { 
         byte buf[] = new byte[1024]; 
         DatagramPacket pack = new DatagramPacket(buf, buf.length); 
         sendSoc.receive(pack); 
         if (pack.getData() != null) { 
          if (!pack.getAddress().equals(getLocalIp())) { 
           prop = new WiphoneProp(pack.getData()); 
           prop.validate(); 
           canLoop=false; 
           Log.d("bytearray", Arrays.toString(pack.getData())); 
           Log.d("address ", pack.getAddress().getHostAddress() + " @@ " + pack.getAddress().getHostName() + " @@ " + pack.getAddress().getCanonicalHostName()); 
           Log.d("result", prop.getWiphoneName()); 

          } 
         } 
        } catch (UnknownHostException e) { 
         Log.d("UnknownHostException", "UnknownHostException"); 


        } 
       } catch (IOException e) { 
        Log.d("SocException", "IOException"); 

       } 
       i++; 
      } 

도와주세요. 명확하지 않은 의견이 있으시면 여기를 클릭하십시오.

답변

0

모든 요청에 ​​대해 동일한 DatagramSocket 개체를 사용하여이 문제를 해결했습니다.