主机发送方
FileInfo EzoneFile = new FileInfo("文件路径");
//打开文件流
FileStream EzoneStream = EzoneFile.OpenRead();
//包的大小
int PacketSize = 1024;
//包的数量
int PacketCount = (int)(EzoneStream.Length / ((long)PacketSize));
//最后一个包的大小
int LastDataPacket = (int)(EzoneStream.Length - ((long)(PacketSize * PacketCount)));
//发送[文件名]到客户端
TransferFiles.SendVarData(cSocket, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
//发送[包的大小]到客户端
TransferFiles.SendVarData(cSocket, System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));
//发送[包的总数量]到客户端
TransferFiles.SendVarData(cSocket, System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));
//发送[最后一个包的大小]到客户端
TransferFiles.SendVarData(cSocket, System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));
//数据包
byte[] data = new byte[PacketSize];
//开始循环发送数据包
for (int i = 0; i < PacketCount; i++)
{
//从文件流读取数据并填充数据包
EzoneStream.Read(data, 0, data.Length);
//发送数据包
TransferFiles.SendVarData(cSocket, data);
}
//如果还有多余的数据包,则应该发送完毕!
if (LastDataPacket != 0)
{
data = new byte[LastDataPacket];
EzoneStream.Read(data, 0, data.Length);
TransferFiles.SendVarData(cSocket, data);
}
备机接收方
byte[] filename = TransferFiles.ReceiveVarData(s);
string SendFileName = System.Text.Encoding.Unicode.GetString(filename);
//MessageBox.Show("文件名" + SendFileName);
//获得[包的大小]
string bagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(s));
//MessageBox.Show("包大小" + bagSize);
//获得[包的总数量]
int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(s)));
//MessageBox.Show("包的总数量" + bagCount);
//获得[最后一个包的大小]
string bagLast = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(s));
//MessageBox.Show("最后一个包的大小" + bagLast);
//创建一个新文件
FileStream MyFileStream = new FileStream(Application.StartupPath + @"\Map\" + SendFileName, FileMode.Create, FileAccess.Write);
while (true)
{
byte[] data = TransferFiles.ReceiveVarData(s);
if (System.Text.Encoding.Unicode.GetString(data) == "GO")
{
break;
}
else
{
//将接收到的数据包写入到文件流对象
MyFileStream.Write(data, 0, data.Length);
}
}
//关闭文件流
MyFileStream.Close();
时间仓促,写的有点急,以后在修改请多多见谅