Android 시 뮬 레이 터 가 UDP 패 킷 을 받 는 몇 가지 문제 분석

본 고 는 안 드 로 이 드 시 뮬 레이 터 가 UDP 패 킷 을 받 는 몇 가지 문 제 를 실례 로 분석 했다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
android 시 뮬 레이 터 UDP 패 킷 을 받 을 수 없습니다.
코드 는 다음 과 같 습 니 다:

DatagramPacket pack = null;
DatagramSocket mail_data = null;
byte receiver[] = new byte[100];
try { 
  pack = new DatagramPacket(receiver,receiver.length); 
  mail_data = new DatagramSocket(22221); 
  mail_data.receive(pack);
} 
catch (Exception e) {
  e.printStackTrace();
}

receive 함수 가 데 이 터 를 받 지 못 하고 기다 리 고 있 습 니 다.
해결 방법:
1.시 뮬 레이 터 실행
2.윈도 명령 줄 열기
    실행:telnet localhost 5554
   5554 는 시 뮬 레이 터 의 포트 입 니 다.실행 하면 android console 에 들 어 갑 니 다.
3.console 에서 실행:
   redir add udp:22221:22221
   그 중에서 첫 번 째 포트 번 호 는 PC 의 포트 이 고 두 번 째 포트 번 호 는 시 뮬 레이 터 포트 입 니 다.(포트 맵
   이 명령 을 실행 하면 PC 22221 포트 에서 받 은 데 이 터 를 시 뮬 레이 터 22221 포트 로 옮 기 면 22221 포트 에서 UDP 패 키 지 를 받 을 수 있 습 니 다.
즉,안 드 로 이 드 시 뮬 레이 터 의 프로그램 UDP 수신 포트 는 22221 로 설정 하고 PC 서버 는 PC 의 IP+포트 22221 로 UDP 패 킷 을 보 내야 한다.
이때 PC 의 22221 포트 가 점용 됐다.

안 드 로 이 드 시 뮬 레이 터 가 UDP 패 킷 을 받 는 몇 가지 문제
받 은 UDP 패 킷 길이 크기
전송 프로 토 콜 이 protocol buffer 를 기반 으로 하기 때문에 받 은 패 킷 은 동적 으로 변화 합 니 다.자바 패 킷 수신 은 by te[]크기 를 먼저 정의 해 야 합 니 다.이렇게 받 은 데이터 신문 의 길이 가 고정 되 어 받 은 데이터 신문 은 반 직렬 화 될 때 자주 오 류 를 보고 합 니 다.
해결 방법:DatagramPacket.getLength()를 이용 하여 실제 데이터 보고 크기 를 캡 처 하고 이 크기 의 by te[]반 직렬 화 를 다시 정의 하면 됩 니 다.

public static void main(String[] args) throws IOException {  
 System.out.println("    ");  
 DatagramSocket datagramSocket = new DatagramSocket(8080);//           
 byte[] buf = new byte[1024];//             
 DatagramPacket datagramPacket = new DatagramPacket(buf, 1024);  
 datagramSocket.receive(datagramPacket);//      
 String string = new String(datagramPacket.getData(), 0,  
    datagramPacket.getLength())  
    + " from " 
    + datagramPacket.getAddress().getHostAddress()  
    + ":" + datagramPacket.getPort();  
 System.out.println(string);  
 datagramSocket.close();  
}

받 은 UDP 패 킷 길이 제한
시 뮬 레이 터 는 패 킷 의 크기 에 제한 이 있 습 니 다!8k 이상 의 데 이 터 는 받 을 수 없다.
정량 분석 을 통 해 8193 byte,즉 8K(8192 byte)로 시 뮬 레이 터 를 초과 하면 받 을 수 없다.
어디서 버 려 졌 는 지 알 수 없다!
진짜 기 회 는 제한 이 없다.
더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기