A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 文韬 中级黑马   /  2013-6-27 10:39  /  1259 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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


  32.             }
  33.         }
复制代码
不知道是哪里出错了,请帮我纠正一下,谢谢




评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

1 个回复

倒序浏览
调试下吧,在服务端设置断点,看看。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马