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