黑马程序员技术交流社区

标题: 检查代码没有问题呀为什么发送文件后保存对话框不出来... [打印本页]

作者: 蒋盛舒    时间: 2013-5-10 17:20
标题: 检查代码没有问题呀为什么发送文件后保存对话框不出来...
  void RecMsg(object socketClientPara)
        {
            Socket socketClient = socketClientPara as Socket;
            while (true)
            {
                //定义一个接收用的 缓存区(2M字节数组)
                byte[] arrMsgRec = new byte[1024 * 1024 * 2];
                //将接收到的数据存入arrMsgRec数组,并返回真正接收到的数据的长度
                int length = socketClient.Receive(arrMsgRec);
                //第0个元素如果是0的话代表是文字
                if (arrMsgRec[0] == 0)
                {
                    //此时是将数组所有的元素都转换成字符串,而真正接收到的只有服务端发来的几个字符
                    string strMsgRec = Encoding.UTF8.GetString(arrMsgRec, 0, length);
                    ShowMessage(strMsgRec);
                }
                   //如果是1,则代表发送过来的是文件数据(图片、视频、文件....)
                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, length-1);
                            ShowMessage("文件保存成功:"+fileSavePath);
                        }
                        }
                }
            }
        }

1.jpg (158.21 KB, 下载次数: 0)

检查代码没有问题呀为什么发送文件后保存对话框不出来呢

检查代码没有问题呀为什么发送文件后保存对话框不出来呢

作者: 蒋盛舒    时间: 2013-5-10 17:58
补充一下问题: 我把代码粘到一个新按钮下可以调出来。
作者: 郎吉祥    时间: 2013-5-10 21:57
哦。这个问题啊。 你在服务端接受文件的线程那里。要改一下   线程名.ApartmentState = ApartmentState.STA;缺少这句话,就会出错误。
比如   void ServerAccept()
        {
            while (true)
            {
                Socket socketConnetion = SocketWatch.Accept();
                dic.Add(socketConnetion.RemoteEndPoint.ToString(), socketConnetion);
                lbendpiont.Items.Add(socketConnetion.RemoteEndPoint.ToString());
                ShowMsg("客户端连接成功" + socketConnetion.RemoteEndPoint.ToString());
                Thread threadSeverRec = new Thread(SeverRecMsg);
                threadSeverRec.SetApartmentState(ApartmentState.STA);
                threadSeverRec.IsBackground = true;
                threadSeverRec.Start(socketConnetion);
                dict.Add(socketConnetion.RemoteEndPoint.ToString(), threadSeverRec);
            
            }
因为在win7系统下。需要这个代码。我也纠结了好久。在网上找了解决方法。http://daociyiyou111.blog.163.com/blog/static/164701512201182104248626/




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