手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

C#实战026:socket实现单文件传输

时间:2024-11-02 23:30:08

1、这里用到了Forms窗口程序来获取需要传送的文件,大家可以参考:C#实战025:控制台调用Forms窗口程序

C#实战026:socket实现单文件传输

2、当我们获取到文件之后我们就要对文件进行操作了,首先我先要告诉服务器我们需要传送的文件时什么,所以这里我们需要先提取文件中的文件名信息出来,这里我们将D:\project中的test.txt文件传到桌面。

3、string fileName = open.FileName; //获取选取文件的文件路径及文件名 FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);//创建文件流,用来读取数据 string fileN = Path.GetFileName(fileName);//提取文件名 byte[] arrMsg = Encoding.UTF8.GetBytes(fileN);//将要发送的字符串转换成UTF8字节数组 byte[] arrSendMsg = new byte[arrMsg.Length + 1];//定义新的字节数组 arrSendMsg[0] = 0;//将数组第一位设置为0,来表示发送的是消息数据 Buffer.BlockCopy(arrMsg, 0, arrSendMsg, 1, arrMsg.Length);//偏移复制字节数组 socketClient.Send(arrSendMsg); //将接受成功的消息返回给SocketServer服务器

C#实战026:socket实现单文件传输

4、在服务器端我们通过接收到的文件信息进行判断,是信息还是文件,是信息就提取文件名出来,方便后面创建文件时使用 if (reveiceName[0] == 0)//判断数组第一个值,如果为0则说明传的是信息 { fileName = Encoding.UTF8.GetString(result, 1, num - 1);//提取字节信息并转换成String Console.WriteLine("接收客户端的消息:{0}", fileName); }

C#实战026:socket实现单文件传输

5、接下来我再客户端再发送一条数据,这次开始发送文件数据了,首先我们需要先创建一个缓存区来将我们的文件以字节形式存储到数组中。

C#实战026:socket实现单文件传输

6、byte[] arrFile = new byte[fs.Length]; //定义缓存控件,长度为文件长度 int length = fs.Read(arrFile, 0, arrFile.Length);//将文件读入缓存空间 byte[] SendarrFile = new byte[length + 1];//定义新的字节数组 SendarrFile[0] = 1;//将数组第一位设置为1,来表示发送的是文件数据 Buffer.BlockCopy(arrFile, 0, SendarrFile, 1, length);//偏移复制字节数组 socketClient.Send(SendarrFile);//将读取成功的文件发送给SocketServer服务器 Console.WriteLine("文件发送完毕!!!!");

C#实战026:socket实现单文件传输

7、到了服务端,我们根据获取到的文件名先创建一个空文件,然后再我们通过获取的字节数组将相应的数据再写入到该文件中去。同样为了识别该信息是文件还是信息,我们对获取的数据先进行一次判断,下面是代码:

C#实战026:socket实现单文件传输

8、if (reveiceName[0] == 1)//判断数组第一个值,如果为0则说明传的是文件 { SaveFileDialog save = new SaveFileDialog();//创建SaveFileDialog实例 string spath = @"C:\Users\admin\Desktop";//制定存储路径 string fullPath = Path.Combine(spath, fileName);//获取存储路径及文件名 FileStream filesave = new FileStream(fullPath, FileMode.Create, FileAccess.Write);//创建文件流,用来写入数据 filesave.Write(result, 1, num - 1);//将数据写入到文件中 filesave.Close(); Console.WriteLine("保存成功!!!"); }

C#实战026:socket实现单文件传输
© 手抄报圈