黑马程序员技术交流社区
标题:
检查代码没有问题呀为什么发送文件后保存对话框不出来...
[打印本页]
作者:
蒋盛舒
时间:
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:19 上传
检查代码没有问题呀为什么发送文件后保存对话框不出来呢
作者:
蒋盛舒
时间:
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