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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁官林 中级黑马   /  2012-4-20 22:11  /  1768 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丁官林 于 2012-4-21 08:51 编辑

我聊天室我设置断点调试过了,发送代码都没问题,接收代码如下:
  //--------------------------服务器端  循环接收消息的方法————————————————
        private void RecMsg(object socketClientPara)
        {
            Socket socketClien = socketClientPara as Socket;
            while (true)
            {
                //定义一个缓存  2M
                byte[] arrMsgRec = new byte[1024 * 1024 * 2];

               
                     //将接收到的数据流存入数组  返回接受到的长度
                     int length =-1;
                     try
                     {
                         length = socketClien.Receive(arrMsgRec);
                     }
                         catch(SocketException ex)
                     {
                         ShowMsg("异常:"+ex.Message);
                             //捕捉到异常后清除异常对象
                         dict.Remove(socketClien.RemoteEndPoint.ToString());//清除套接字
                         dictThread.Remove(socketClien.RemoteEndPoint.ToString());//清除线程
                         lbOnline.Items.Remove(socketClien.RemoteEndPoint.ToString());//清楚列表
                         break;
                         }
                     catch (Exception ex)
                     {
                         ShowMsg("异常:"+ex.Message);
                         break;
                     }
                     if (arrMsgRec[0] == 0)//接收的是文字
                     {
                     //转成字符串
                     string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 1, length-1);
                     ShowMsg(strMsgRec);
                 }
                 else if (arrMsgRec[0] == 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,arrMsgRec.Length-1);
                             ShowMsg("文件保存成功!"+fileSavePath);
                         }
                     }
                 }
               
            }
        }
也能接收,不管我传几K的文件,接收后的文件怎么都是1.99M,而且接收后的文件不是以前的类型,我这段接收代码有问题吗?

评分

参与人数 1技术分 +3 收起 理由
郑文 + 3

查看全部评分

1 个回复

倒序浏览
  fs.Write(arrMsgRec,1,arrMsgRec.Length-1);
看下是不是这里写错了 应该是fs.Write ( arrMsgRec , 1 , length-1)
   在字节数那里你写的2M的缓区长度-1,所以收到的文件都是1.99M
接收后的文件类型名,在没有设置默认的保存类型的话是需要你自己填上类型名的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马