2010-07-15 3 views
0

javas NIO 패키지를 사용하여 비 차단 서버를 구축하고 수신 된 데이터의 유효성을 확인하는 데 몇 가지 질문이 있습니다.비 차단 서버에서 수신 한 데이터의 유효성 확인

소켓 채널에서 읽기를 호출하면 읽는 바이트 버퍼를 채우려고합니다 (문서마다). 클라이언트에서 서버로 10 바이트를 전송하면 서버는 10 바이트를 바이트 버퍼로 읽고 바이트 버퍼의 나머지 바이트는 0으로 유지하며 읽기 연산에서 반환되는 숫자는 클라이언트가 10 바이트를 썼을지라도 내 바이트 버퍼의 크기.

내가 알아 내려고하는 것은 서버가 소켓 채널 (위의 경우 1024 대신에 10)에서 읽을 때 클라이언트가 서버에 보낸 바이트 수를 얻는 방법이 있는지입니다.

만약 내가 작동하지 않으면이 '과다'데이터를 클라이언트로부터받은 모든 실제 데이터를 분리 할 수 ​​있다는 것을 알 수있다. '명령어 세트 헤더'와 함께 구분 기호를 사용하여 바이트 버퍼에 저장한다. , 그러나 이것이 존재해야하는 것처럼 보입니다. 그래서 나는 명백한 무엇인가를 놓치고 있는지, 또는 이것이 할 수없는 낮은 수준의 이유가 있는지 궁금해 할 필요가 있습니다.

감사합니다 :)

답변

1

당신은 아마 당신의 버퍼에 악명 높은 flip() 전화를 잊어 버렸습니다.

buffer.clear(); 
channel.read(buffer); 
buffer.flip(); 
// now you can read from the buffer 
buffer.get... 

나는 nio.sucks

+0

조지아에 내 서명을 변경해야합니다! 당신 말이 맞아, 나는 지금 바보 같아! 감사합니다. – vimalloc