按照视频里说的写代码,客户端能发送文件,但是服务端接收不了文件,发送文件完毕后没有弹出选择保存路径的窗口是怎么回事:
客户端的发送文件的代码:- //向服务端发送文件
- private void btnSendFile_Click(object sender, EventArgs e)
- {
- using(FileStream fs=new FileStream(txtChooseFile.Text,FileMode.Open))
- {
- byte[]arrFile=new byte[1024*1024*2];//定义一个2m的数组(缓存区)
- //将文件数据读到数组 arrFileSend中,并获得读取的真实数据长度length
- int length = fs.Read(arrFile,0,arrFile.Length);
- byte[] arrFileSend = new byte[length + 1];
- arrFileSend[0] = 1;//代表发送的是文件数据
- Buffer.BlockCopy(arrFile, 0, arrFileSend, 1, length);
- socketClient.Send(arrFileSend);
- showMsg("发送成功");
-
- }
- }
复制代码 服务端接收文件的代码:- //接收客户端的消息
- void RecMsg(object socketClientPara)
- {
- while (true)
- {
- Socket socketClient = socketClientPara as Socket;
- //定义一个接收的缓存区(2m字节组)
- byte[] arrMsgRec = new byte[1024 * 1024 * 2];
- //将接收到的数据存入arrMsgRec,并返回真正接收到的数据的长度
- int length = socketClient.Receive(arrMsgRec);
- //此时是将数组所有的元素都转成字符串,而真正接收到的只有服务端发来的几个字符
- if (arrMsgRec[0] == 0)//判断发送过来的数据的第一个元素是0,则代表发送过来的数据为文字数据
- {
- string strArrMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length);
- ShowMsg("客户端 :" + strArrMsgRec);
- }
- else if(arrMsgRec[0]==1)//第一个元素是1,则代表发送过来的数据为文件数据(图片/视频/文件....)
- {
- SaveFileDialog sfd = new SaveFileDialog();//保存文件选择框对象
- if (sfd.ShowDialog()== System.Windows.Forms.DialogResult.OK)//用户选择文件路径后
- {
- string FileSavePath = sfd.FileName;//获得要保存的文件路径
- //创建一个文件流,让文件流来根据文件路径来创建文件
- using (FileStream fs = new FileStream(FileSavePath, FileMode.Create))
- {
- fs.Write(arrMsgRec, 1, length - 1);
- ShowMsg("文件接收成功:"+FileSavePath);
- }
-
- }
- }
- }
- }
复制代码 不知道是哪里出错了,请帮我纠正一下,谢谢
|