黑马程序员技术交流社区
标题:
聊天室,客户端向服务端发送文件问题
[打印本页]
作者:
申延超
时间:
2012-12-1 15:59
标题:
聊天室,客户端向服务端发送文件问题
本帖最后由 申延超 于 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); 添加后正常弹出。
麻烦亲们帮忙具体解释下,或者说还有没有别的方法,谢谢!
作者:
刘亚龙
时间:
2012-12-1 19:37
在网上找到这个资料http://www.soaspx.com/dotnet/csharp/csharp_20100424_3981.html
估计已经解释的很详细了,但是超出了我的理解范畴,你琢磨一下吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2