java
  • networking
  • byte
  • communication
  • 2012-05-07 2 views 0 likes 
    0

    XXXX = XXXX = XXXX = ... 따라서 에서 즉시 메시지를 볼 수 있습니다 (메시지는 5 바이트 시퀀스입니다. :. "XXXX =
    X는 '=') 물론바이트 시퀀스 프레임

    지금, 전송이 주기적으로 발생 제외한 모든 수를 할 수있는 몇 가지 점에서 을 내 응용 프로그램이 시작 바이트 순서

    을 받고 무엇이입니다 해당 바이트를 가져와 5 바이트 메시지로 프레이밍하는 가장 좋은 알고리즘?
    두 가지 문제가 있습니다.
    1. 첫 번째 메시지는 어떻게 찾습니까? 나는 내가 '='맞을 때까지 몇 바이트를 떨어 뜨릴 필요가 있다고 생각하니?
    2. 응용 프로그램이 transimmision 일시 중지를 처리하는 방법과 새로운 시작.

    +0

    많은 정보가 누락되었습니다. 입력을 생성하는 것은 무엇입니까? 바이트 시퀀스를 시작할 수 있습니까? null로 종료 되었습니까? 독서를 중단 할시기를 어떻게 결정합니까? 새로운 시작이 수반되는 것은 무엇입니까 (버퍼를 지우고 다시 읽기 시작)? – adu

    +0

    만약 당신이 지나치게 단순화하지 않고 한 번에 5 바이트가 오면, 첫 번째 프레임에 대해 5 개의 가능한 모든 프레임 위치를 시도하고 실패한 프레임을 버릴 수 있습니다 (물론 프레임 크기가 많으면 큰). 일시 중지를 처리하기 위해 다시 시작하면 불일치가 감지되면 프로세스를 다시 시작할 수 있습니다. – trutheality

    답변

    0

    가장 간단한 방법은 블로킹 읽기 (가장 단순하기 때문에 가장 일반적인 방법이기도 함)를 사용하여 한 번에 5 바이트를 읽는 것입니다.

    일반적으로 처음에는 정크 데이터가 있다고 가정하지 않고 모든 것을 읽습니다. 헤더가 있다면, 나는 그것을 읽을 것입니다.

    DataInputStream dis = new DataInputStream(socket stream); 
    byte[] bytes = new byte[5]; 
    
    int sep; 
    do { 
        dis.readFully(bytes); 
        process(bytes); 
    } while((sep = dis.read()) == '='); 
    if (sep > 0) 
        System.err.println("Unexpected character "+ (char) sep)); 
    
    관련 문제