문제

파일 공유를 위해 미들웨어 시스템을 구현해야하며 Bittorrent에서 발생하는 일과 달리 파일을 분할해야합니다. 여기서 Varios 소스로부터 동시에 별도의 부분을 보내고받습니다. 어떻게해야하나요? 라이브러리입니까 아니면 나 자신을 분할하는 파일을 구현해야합니까?

도움이 되었습니까?

해결책

파일을 블록으로 분할하십시오. 그런 다음 각 블록에서 SHA 해시 (또는 다른 해싱 알고리즘)를 계산하십시오. 따라서 파일이 905KB 인 경우 10 개의 해시가 계산됩니다.

서버에는 제공되는 각 파일에 대한 해시 정의 파일이 포함됩니다. 이 해시 정의 파일에는 해시와 함께 파일의 모든 블록 목록이 포함됩니다. 따라서 서버가 Test.Exe라는 905KB 파일을 사용하는 경우. 그런 다음 파일의 10 해시 목록이 포함 된 Test.exe.hashes라는 다른 파일이 있습니다.

클라이언트는 해시 정의 파일을 다운로드하고 모든 블록이 있는지 확인합니다. 클라이언트는 각 블록을 개별적으로 요청할 수 있으며 다운로드 한 후에는 부패가 없는지 확인하기 위해 다시 해시를 계산할 수 있습니다.

파일을 물리적으로 분할 할 필요가 없으며 파일을 분할하는 것이 관심있는 부분을 읽는 것입니다. 파일의 첫 번째 블록은 바이트 범위에서 102399로, 다음 블록은 102400에서 204800입니다. 등등. 따라서 파일을 열고 해당 위치를 찾고 데이터를 읽고 파일을 닫으십시오.

다른 팁

Split & Concat (GNU 소프트웨어)의 구현을보십시오.

솔로몬 리드 인코딩 사용을 고려할 수 있습니다. 최종 블록을 훨씬 쉽게 얻을 수 있습니다. 이것은 Microsoft가 Avalaunch에서 취한 경로입니다.

관심이 없음 : 왜 Bittorrent를 구현하지 않습니까? 많은 OpenSource 클라이언트가 있습니다 (즉 azureus) 그리고 프로토콜은입니다 정말 간단합니다. 도 있습니다 좀 더 자세한 기사, 그러나 여기에는 일부 확장 기능이 포함되어 있습니다. 의심의 여지없이 공식 사양은 항상 옳습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top