黑马程序员技术交流社区

标题: 关于socket聊天程序接收文件的问题 [打印本页]

作者: 文韬    时间: 2013-6-27 10:39
标题: 关于socket聊天程序接收文件的问题
按照视频里说的写代码,客户端能发送文件,但是服务端接收不了文件,发送文件完毕后没有弹出选择保存路径的窗口是怎么回事:
客户端的发送文件的代码:
  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.         }
复制代码
不知道是哪里出错了,请帮我纠正一下,谢谢





作者: 关关雎鸠    时间: 2013-6-27 11:56
调试下吧,在服务端设置断点,看看。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2