黑马程序员技术交流社区

标题: 聊天室,客户端向服务端发送文件问题 [打印本页]

作者: 申延超    时间: 2012-12-1 15:59
标题: 聊天室,客户端向服务端发送文件问题
本帖最后由 申延超 于 2012-12-10 18:01 编辑
  1. string ip = skt.ToString();//将传过来的参数转为string类型
  2.             while (true)
  3.             {
  4.                 byte[] resXiaoXi = new byte[1024 * 1024 * 2];//定义个byte数组存接收的数据
  5.                 int length = dicSock[ip].Receive(resXiaoXi);//将要接收的数据写入byte数组中,并得到接收的数据的长度
  6.                 if (resXiaoXi[0] == 0)//判断发送过来的数据是文件还是文字,0代表文字,1代表文件
  7.                 {
  8.                     string msg = System.Text.Encoding.Default.GetString(resXiaoXi, 1, length-1);//将接收的数组转为string类型
  9.                     ShowMSG(msg + "来自" + ip);
  10.                 }
  11.                 else if (resXiaoXi[0] == 1)
  12.                 {
  13.                     SaveFileDialog sfd = new SaveFileDialog();
  14.                     if(sfd.ShowDialog()== System.Windows.Forms.DialogResult.OK)
  15.                     {
  16.                         string fileSavePath = sfd.FileName;//获去要保存位置的路径
  17.                         using (FileStream fs = new FileStream(fileSavePath, FileMode.Create)) //创建文件流,让文件流根据路径创建一个文件
  18.                         {
  19.                             fs.Write(resXiaoXi, 1, length - 1);//将数据写入到创建的文件中
  20.                             ShowMSG("文件保存成功:" + fileSavePath + "来自" + ip);
  21.                         }
复制代码
这是聊天室那块服务端接收文字和文件那段的代码,可我从客户端发送个文件过去,服务端并不弹出文件保存框,设断点调试,程序执行
SaveFileDialog sfd = new SaveFileDialog();这行就运行不下去了,也不抛异常,然后百度得到结果说是XP和win7编程差异问题,让在
Thread thr = new Thread(rec);new线程后加上 thr.SetApartmentState(ApartmentState.STA); 添加后正常弹出。
麻烦亲们帮忙具体解释下,或者说还有没有别的方法,谢谢!

作者: 刘亚龙    时间: 2012-12-1 19:37
在网上找到这个资料http://www.soaspx.com/dotnet/csharp/csharp_20100424_3981.html
估计已经解释的很详细了,但是超出了我的理解范畴,你琢磨一下吧




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