2015-01-12 2 views
2

죄송합니다, 제 영어. 안드로이드에서 블루투스 팬 인터페이스를 사용하여 휴대 전화에서 데이터를 송수신해야합니다.데이터 그램 패킷을 보내고 받으십시오

try 
      { 

      ds = new DatagramSocket(); 
      byte buf[] = "Ciao".getBytes(); 
      DatagramPacket msg = new DatagramPacket(buf, buf.length, InetAddress.getByName(add), p); 

      ds.send(msg); 

     } 

을하고 그것을 완벽하게 작동합니다 : 이것은 내가 보내 구현 한 코드입니다, 나는 AsyncTask를의 기능 DoInBackground()로를했습니다. 이제 라디오의 응답을 100 초 기다려야합니다. 나는이 코드를 구현하기로 결정 :

try 
     { 
      ds.setSoTimeout(10000); 

      while(true) 
      { 
       try 
       { 
        ds.receive(dp); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
      } 



     } 
     catch (IOException e) 
     { 

     } 

하지만 세 가지 질문이 있습니다 1. 내가 192.168.11.2 1234 포트에 패킷을받을 필요하지만이 DatagramSocket를 선언 할 때 나는 때문에, 그것을 무효로 설정 내가 포트와 주소를 넣으면 코드가 작동하지 않는다. 2. 라디오로받은 패킷을 어떻게 관리 할 수 ​​있습니까? 주소 및 포트 바이트를 사용할 필요가 없습니다. 3. 왜 루프 전에 타임 아웃을 했습니까?

답변 해 주셔서 감사합니다.

답변

0

1) 이후 포트 번호로 데이터 그램 소켓을 만듭니다. DatagramSocket (p);

2)는 응답의 크기의의 ByteBuffer 및 응답, 즉의 길이가 DatagramPacket의이 : 당신은 같은 객체로 변환하기 위해 필요한이 데이터 그램 패킷으로받은 후

int responseLength = 1024; 
byte[] responseData = new byte[responseLength]; 
DatagramPacket response = new DatagramPacket(responseData, responseLength); 

그것을 그 로 보냈습니다. 이 어쩌면 같은 뭔가 다음에 setSoTimeout 메시지가 100 단위를 기다릴 발생하지 않습니다

String s = new String(response.getData()); 

3), 그냥 100 단위 후 아무것도 수신() 다음은 시간이 초과됩니다에 의해 읽기되어 있지 않은 경우는 것을 말하고있다. 이 작업은 연결 당 한 번만 설정하면되고 루프 중에는 여러 번 설정하면 안됩니다.

희망이 도움이되었습니다.

관련 문제