展开全部

const int blockLength=512*1024;

public void SendFile(string filePath, NetworkStream stream)     //发送文件

{

//传输内容

using (FileStream fs = File.Open(filePath, FileMode.Open))

{

int readLength = 0;

byte[] data = new byte[blockLength];

//发送大小e69da5e6ba9062616964757a686964616f31333339663938

byte[] length = new byte[8];

BitConverter.GetBytes(new FileInfo(filePath).Length).CopyTo(length, 0);

stream.Write(length, 0, 8);

//发送文件

while ((readLength = fs.Read(data, 0, blockLength)) > 0)

{

stream.Write(data, 0, readLength);

}

}

}

public bool ReceiveFile(string fileName, NetworkStream stream) //接收文件

{

try

{

long count = GetSize(stream);

if (count == 0)

{

return false;

}

long index = 0;

int currentBlockLength = 0;

int receivedBytesLen = 1;

using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate))

{

while (receivedBytesLen > 0 && index 

{

byte[] clientData = new byte[blockLength];

receivedBytesLen = 0;

if (blockLength 

{

currentBlockLength = blockLength;

}

else

{

currentBlockLength = (int)(count - index);

}

receivedBytesLen = stream.Read(clientData, 0, currentBlockLength);

fs.Write(clientData, 0, receivedBytesLen);

index += receivedBytesLen;

}

}

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

return false;

}

return true;

}

private int GetSize(NetworkStream stream) //获取文件大小

{

int count = 0;

byte[] countBytes = new byte[8];

try

{

if (stream.Read(countBytes, 0, 8) == 8)

{

count = BitConverter.ToInt32(countBytes, 0);

}

else

{

return 0;

}

}

catch

{

return 0;

}

return count;

}

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐