黑马程序员技术交流社区
标题:
聊天室问题
[打印本页]
作者:
丁官林
时间:
2012-4-20 22:11
标题:
聊天室问题
本帖最后由 丁官林 于 2012-4-21 08:51 编辑
我聊天室我设置断点调试过了,发送代码都没问题,接收代码如下:
//--------------------------服务器端 循环接收消息的方法————————————————
private void RecMsg(object socketClientPara)
{
Socket socketClien = socketClientPara as Socket;
while (true)
{
//定义一个缓存 2M
byte[] arrMsgRec = new byte[1024 * 1024 * 2];
//将接收到的数据流存入数组 返回接受到的长度
int length =-1;
try
{
length = socketClien.Receive(arrMsgRec);
}
catch(SocketException ex)
{
ShowMsg("异常:"+ex.Message);
//捕捉到异常后清除异常对象
dict.Remove(socketClien.RemoteEndPoint.ToString());//清除套接字
dictThread.Remove(socketClien.RemoteEndPoint.ToString());//清除线程
lbOnline.Items.Remove(socketClien.RemoteEndPoint.ToString());//清楚列表
break;
}
catch (Exception ex)
{
ShowMsg("异常:"+ex.Message);
break;
}
if (arrMsgRec[0] == 0)//接收的是文字
{
//转成字符串
string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 1, length-1);
ShowMsg(strMsgRec);
}
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,arrMsgRec.Length-1);
ShowMsg("文件保存成功!"+fileSavePath);
}
}
}
}
}
也能接收,不管我传几K的文件,接收后的文件怎么都是1.99M,而且接收后的文件不是以前的类型,我这段接收代码有问题吗?
作者:
z4226797
时间:
2012-4-21 08:42
fs.Write(arrMsgRec,1,arrMsgRec.Length-1);
看下是不是这里写错了 应该是fs.Write ( arrMsgRec , 1 , length-1)
在字节数那里你写的2M的缓区长度-1,所以收到的文件都是1.99M
接收后的文件类型名,在没有设置默认的保存类型的话是需要你自己填上类型名的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2