저는 서버와 클라이언트 간의 통신 방법을 설정하고 있습니다.NetworkStream 바이트 배열에 구분 기호를 배치하는 방법은 무엇입니까?
stream.Read(message, 0, 1)
if(message == <byte representation of a known class>)
{
stream.Read(message, 0, Class.RequestSize);
}
궁금 해요 : 나는 순간을하고 있어요 방법 스트림의 첫 번째 바이트는 내가 요청의 길이를 결정할 수 요청의 클래스를 찾고 다음오고 있는지의 지표를 포함하는 것입니다 클래스 크기를 알 수없는 경우를 처리하는 방법, 알려진 요청을 읽은 후 데이터가 손상된 경우
스트림에 일종의 구분 기호를 삽입 할 수 있다고 생각하지만 바이트가 0-255 사이에 불과하므로 고유 한 구분 기호를 만드는 방법을 알지 못합니다. 메시지의 끝을 표현하기 위해 스트림에 패턴을 배치하고 싶습니까? 이 패턴이 실제 데이터로 착각하지 않을만큼 충분히 고유하다는 것을 어떻게 확신 할 수 있습니까?
스트림을 고정 된 크기 ** 덩어리 **로 분할합니다 (예 : 64K). 이 값이 0xFFFF가 아닌 청크를받을 때 현재 크기로 각 청크에 2 바이트를 앞에 추가하면 스트림의 끝에 도달합니다. 고유 한 패턴을 가지려고 시도하지 마십시오. ** 입력 데이터를 인코딩하지 않는 한 ** 깨질 수 있습니다 **.하지만 더 커지게 만듭니다. –
@Adriano의 접근 방식 누군가가 시간이 끝날 때까지 0xFFFF 크기를 보내지 못하게하려면 어떻게해야합니까? – afuzzyllama
보낸 사람이 악의적 인 사람이면 아무런 제한도 없습니다. 그러나 전송할 청크의 수와 함께 추가 카운터 (첫 번째 청크 앞)를 수신 할 수 있다면 (최대 크기도 제한됩니다). 그러나 나는 데이터 무결성 검사를 위해 이런 종류의 검사를 추가하거나하지 않도록 두 번 고려할 것입니다. 이런 종류의 물건은 프로토콜 **에 의해 저수준 **에서 처리됩니다 (TCP 연결을 사용하고 있습니까?). –