局域网中如何实现传输文件夹里所有文件的功能?如果要传输单个文件很容易实现,如下图的方式:发送端
//创建一个文件对象
FileInfo EzoneFile = new FileInfo(dir);
//打开只读文件流
FileStream EzoneStream = EzoneFile.OpenRead(); //指向远程服务端节点
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse("2005"));
//创建套接字
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接到发送端
client.Connect(ipep); //发送[文件名]到客户端
CommonModule.EzoneModule.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
//传递数据部分
byte[] data = new byte[PacketSize];
//开始循环发送数据包
for (int i = 0; i < PacketCount; i++)
{
EzoneStream.Read(data, 0, data.Length);
CommonModule.EzoneModule.SendVarData(client, data);
} //检查还有多余的数据包否
if (LastDataPacket != 0)
{
data = new byte[LastDataPacket];
EzoneStream.Read(data, 0, data.Length);
CommonModule.EzoneModule.SendVarData(client, data);
} //关闭套接字
client.Close(); //关闭文件流
EzoneStream.Close();
接收端
//创建一个网络端点
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("2005"));
//创建一个套接字
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定套接字到端口
server.Bind(ipep); //开始侦听(并堵塞该进程)
server.Listen(10); //确认连接
Socket client = server.Accept();
//获取客户端节点对象
IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint; //获得[文件名]
string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)); //创建临时文件
FileStream MyFileStream = new FileStream(System.AppDomain.CurrentDomain.BaseDirectory +"temp.txt", FileMode.Create, FileAccess.Write);
//已发送包的个数
int SendedCount = 0;
//实例化UnicodeEncoding对象用于转换。
UnicodeEncoding unicode = new UnicodeEncoding(); while (true)
{
byte[] data = TransferFiles.ReceiveVarData(client);
if (data.Length == 0)
{
break;
}
else
{
SendedCount++;
//将接收到的数据包写入到文件流对象
MyFileStream.Write(data, 0, data.Length);
//显示已发送包的个数
//MessageBox.Show("已发送包个数"+SendedCount.ToString()); }
} MyFileStream.Close();
// server.Close();相当于传输时,定义了一个数据通道,发送文件名和数据部分。但是,如果是文件夹中很多文件,在发送端可以遍历所有的文件,但接收端很难实现与发送端的同步接收。
我的问题应该描述清楚了,望大家帮忙解决!
//创建一个文件对象
FileInfo EzoneFile = new FileInfo(dir);
//打开只读文件流
FileStream EzoneStream = EzoneFile.OpenRead(); //指向远程服务端节点
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse("2005"));
//创建套接字
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接到发送端
client.Connect(ipep); //发送[文件名]到客户端
CommonModule.EzoneModule.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
//传递数据部分
byte[] data = new byte[PacketSize];
//开始循环发送数据包
for (int i = 0; i < PacketCount; i++)
{
EzoneStream.Read(data, 0, data.Length);
CommonModule.EzoneModule.SendVarData(client, data);
} //检查还有多余的数据包否
if (LastDataPacket != 0)
{
data = new byte[LastDataPacket];
EzoneStream.Read(data, 0, data.Length);
CommonModule.EzoneModule.SendVarData(client, data);
} //关闭套接字
client.Close(); //关闭文件流
EzoneStream.Close();
接收端
//创建一个网络端点
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("2005"));
//创建一个套接字
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定套接字到端口
server.Bind(ipep); //开始侦听(并堵塞该进程)
server.Listen(10); //确认连接
Socket client = server.Accept();
//获取客户端节点对象
IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint; //获得[文件名]
string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)); //创建临时文件
FileStream MyFileStream = new FileStream(System.AppDomain.CurrentDomain.BaseDirectory +"temp.txt", FileMode.Create, FileAccess.Write);
//已发送包的个数
int SendedCount = 0;
//实例化UnicodeEncoding对象用于转换。
UnicodeEncoding unicode = new UnicodeEncoding(); while (true)
{
byte[] data = TransferFiles.ReceiveVarData(client);
if (data.Length == 0)
{
break;
}
else
{
SendedCount++;
//将接收到的数据包写入到文件流对象
MyFileStream.Write(data, 0, data.Length);
//显示已发送包的个数
//MessageBox.Show("已发送包个数"+SendedCount.ToString()); }
} MyFileStream.Close();
// server.Close();相当于传输时,定义了一个数据通道,发送文件名和数据部分。但是,如果是文件夹中很多文件,在发送端可以遍历所有的文件,但接收端很难实现与发送端的同步接收。
我的问题应该描述清楚了,望大家帮忙解决!
所以,我想先实现将A中的文件全发送到B机器。
望大家给个有用的建议,或相关的源码之类的。谢谢各位的关注~~