내 전송 파일 응용 프로그램에 문제가 있습니다. 모든 것이 멋지며 작동해야하는 방식으로 작동하지만 보낸 파일의 일부가 손상되었음을 발견했습니다.
비디오 파일 (.MP4)을 보낼 때처럼 성공적으로 전송되었지만 스냅 사진의 일부 프레임이 손상되었습니다. 원본 MP4 파일을 재생 했으므로 그림이 너무 완벽 해 보이지 않았습니다. 그 스냅 사진에.
그래서 여기에 내 코드가있다. 나는 이제 fs.Seek
을 사용하는 것에 대해 혼란 스럽다. 누군가 새로운 파일을 소스 파일과 동일하게 만들지 않는다고 나에게 말했다. 내가 소켓 TCP를 사용하고보낸 파일의 데이터가 손상되었습니다. TCP 소켓 .. 어떻게 수정합니까?
.. (닷넷 4.0)
전송 방식 (클라이언트) :
FileStream fs;
long sum;
long fileSize;
byte[] data = null;
NetworkStream network;
const int packetSize = 1024*8;
private void SendFile(string srcPath, string destPath)
{
string dest = Path.Combine(destPath, Path.GetFileName(srcPath));
using (fs = new FileStream(srcPath, FileMode.Open, FileAccess.Read))
{
try
{
sum = 0;
int count = 0;
data = new byte[packetSize];
//send the destination path and the file size to SERVER.
SendCommand("receive<" + dest + "<" + fs.Length.ToString());
while (sum < fileSize)
{
if (fileSize - sum < packetSize)
{
count = fs.Read(data, 0, Convert.ToInt32(fileSize - sum));
network.Write(data, 0, Convert.ToInt32(fileSize - sum));
}
else
{
count = fs.Read(data, 0, data.Length);
network.Write(data, 0, data.Length);
}
fs.Seek(sum, SeekOrigin.Begin);
sum += count;
backgroundWorker1.ReportProgress((int)((sum * 100)/fileSize));
}
network.Flush();
}
finally
{
fs.Dispose();
data = null;
}
}
}
는 방법 (서버)를 수신 :
FileStream fs;
long sum;
long fileSize;
byte[] data = null;
NetworkStream network;
const int packetSize = 1024*8;
public void Receive(string destPath, long fileSize)
{
using (fs = new FileStream(destPath, FileMode.Create, FileAccess.Write))
{
try
{
int count = 0;
long sum = 0;
data = new byte[packetSize];
while (sum < fileSize)
{
if (fileSize - sum < packetSize)
{
count = network.Read(data, 0, Convert.ToInt32(fileSize - sum));
fs.Write(data, 0, Convert.ToInt32(fileSize - sum));
}
else
{
count = network.Read(data, 0, data.Length);
fs.Write(data, 0, data.Length);
}
fs.Seek(sum, SeekOrigin.Begin);
sum += count;
}
}
finally
{
fs.Dispose();
data = null;
}
}
}
왜 당신은'fs '를 찾고 있습니까? 다음 읽기를 위해 올바른 위치에 있어야합니다. –
그것은 SEEK ..와는 작동하지 않았습니다. 나는 그 라인을 제거하려고했습니다. –