1

클라이언트 - 서버 프로그램을 사용하여 네트워크를 통해 파일을 보내고 있습니다. 파일의 바이트 (File.ReadAllBytes())를 읽은 후 바이트 배열을 객체의 필드로 설정합니다. 그런 다음 직렬화하여 클라이언트에 개체를 보내면 클라이언트는 개체를 deserialize하고 BinaryWriter을 사용하여 파일을 가져와야합니다.파일의 바이트 배열을 필드로 사용하여 객체 직렬화

클라이언트 - 서버 간의 모든 메시지는 Command라는 클래스의 개체 직렬화를 통해 전달됩니다.

이 방법은 파일을 바이트 배열에로드 할 때 많은 메모리를 소비하는 것처럼 보입니다.

누구나 파일을 조금씩 보낼 수있는 또 다른 메커니즘을 제안 할 수 있습니까? 너무 많은 메모리를 사용하지 않아도됩니다. 파일의 메모리 주소를 보내고 서버가 클라이언트의 메모리 주소 (루프를 사용)를 사용하여 파일을 조금씩 가져올 수 있습니까?

답변

2

최상의 옵션은 스트리밍 전송을 사용하는 것입니다. wcf의 기본 기능입니다.

도움말 herehere을 찾을 수 있습니다.

편집 : 당신은 &이 방법처럼 보내 읽으려고 시도 할 수

:

using (FileStream fs = new FileStream(@"C:\...\file.txt", FileMode.Open)) 
    { 
    byte[] buffer = new byte[1024]; 
    int len; 
    while ((len = fs.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     //client.Send(buffer, 0, len); 
    } 
    } 
+0

이미 사용하고 소켓. 이것은 코드의 완전한 구조 조정을 필요로하는 것처럼 보입니다. 그렇지 않습니까? @ cybermaxs – manas

+0

네,하지만 wcf에서 더 쉬울 것입니다. 내가 wcf의 큰 팬이기 때문에 나의 대답은 적절하지 않다. 또한 http://stackoverflow.com/questions/5659189/how-to-split-a-large-file-into-chunks-in-c – Cybermaxs

+0

을 확인하십시오. 감사합니다. 좋은 기사 인 것처럼 보이지만 여전히 불가능합니다. 구현은 개체의 serialize/deserializing을 통해 클라이언트 - 서버간에 메시지를 전달합니다. 다시 구조 조정이 필요합니다. 맞습니까? @cybermaxs – manas