本帖最后由 丁官林 于 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,而且接收后的文件不是以前的类型,我这段接收代码有问题吗? |