C# 用winsock 传输文件夹

在C#中使用Winsock传输文件夹需要进行以下步骤:

1、创建一个Socket对象并将其绑定到本地IP地址和端口号。

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080); // 本地IP地址和端口号
socket.Bind(endPoint);
socket.Listen(10);

2、接受客户端连接请求并建立连接。

Socket clientSocket = socket.Accept();

3、遍历文件夹并将每个文件发送给客户端。

string folderPath = @"C:\Folder"; // 要传输的文件夹路径
string[] fileEntries = Directory.GetFiles(folderPath); // 获取文件夹中所有文件的路径

foreach (string filePath in fileEntries)
{
    byte[] fileNameBytes = Encoding.ASCII.GetBytes(Path.GetFileName(filePath));
    byte[] fileDataBytes = File.ReadAllBytes(filePath);

    // 将文件名和数据的大小作为字节数组发送给客户端
    byte[] fileSizeBytes = BitConverter.GetBytes(fileDataBytes.Length);
    byte[] dataToSend = new byte[4 + fileNameBytes.Length + fileSizeBytes.Length + fileDataBytes.Length];
    fileSizeBytes.CopyTo(dataToSend, 0);
    fileNameBytes.CopyTo(dataToSend, 4);
    fileDataBytes.CopyTo(dataToSend, 4 + fileNameBytes.Length + fileSizeBytes.Length);

    clientSocket.Send(dataToSend);
}

4、在客户端接收数据并写入文件。

byte[] buffer = new byte[1024];
int bytesReceived = 0;
int totalBytesReceived = 0;

while (totalBytesReceived < fileSize)
{
    bytesReceived = clientSocket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
    if (bytesReceived == 0) break;

    fileStream.Write(buffer, 0, bytesReceived);
    totalBytesReceived += bytesReceived;
}

在这个示例中,我们使用一个循环来接收数据并将其写入文件流中。我们还使用fileSize变量来跟踪已接收的字节数以及剩余的字节数,以便在循环结束后关闭文件流和套接字。

需要注意的是,由于文件夹可能包含子文件夹和其他类型的文件(例如符号链接和管道),因此在遍历文件夹之前需要进行适当的过滤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值