各位大虾:
小弟在做点对多点下载文件时,服务端如下发送文件:
while(len1>0) //len1是文件剩余长度;
{
len2= len>1024?1024:len; //len2是缓冲区长度;
dnfile.Read (s,len2);
ret= send(client,s,len2,0);
if(ret<0)
{
closesocket(client);
dlg->m_listbox .AddString ("发送文件到客户端出错");
break;
}
len1 = len1-ret;
len = len-ret; //len是文件剩余长度
if(len1==0)
{
closesocket(client);
dnfile.Close ();
dlg->m_listbox .AddString ("文件传输结束,请关闭socket!");
}
}客户端如下:
//socket网络事件响应函数
switch(lParam)
{
case FD_READ:
if (m_filesize>0)
{
bufsize = m_filesize>BUFFSIZE?BUFFSIZE:m_filesize;
ret = recv(m_sclient,buf,bufsize,0);
if(ret<0)
{
myfile.Close ();
closesocket(m_sclient);
this->m_listbox .AddString ("传输出错,请重新下载!!");
return;
}
myfile.Write ((const void *)buf,ret);
m_filesize -=ret;
return;
}
m_state = 'E'; //文件接收完毕;状态字:'E'
this->m_listbox .AddString ("文件接收完毕");
myfile.Close ();
return;
....
}问题是:为什么文件传输过程中,经常性的出现异常??即使C/S端都在本机上,也十有三四的出问题,客户端换成其它机子,出问题的几率更高。当传送小型的.txt文件时才不太出错.各位大虾能斑斑小弟吗?谢谢了!!!!!!
小弟在做点对多点下载文件时,服务端如下发送文件:
while(len1>0) //len1是文件剩余长度;
{
len2= len>1024?1024:len; //len2是缓冲区长度;
dnfile.Read (s,len2);
ret= send(client,s,len2,0);
if(ret<0)
{
closesocket(client);
dlg->m_listbox .AddString ("发送文件到客户端出错");
break;
}
len1 = len1-ret;
len = len-ret; //len是文件剩余长度
if(len1==0)
{
closesocket(client);
dnfile.Close ();
dlg->m_listbox .AddString ("文件传输结束,请关闭socket!");
}
}客户端如下:
//socket网络事件响应函数
switch(lParam)
{
case FD_READ:
if (m_filesize>0)
{
bufsize = m_filesize>BUFFSIZE?BUFFSIZE:m_filesize;
ret = recv(m_sclient,buf,bufsize,0);
if(ret<0)
{
myfile.Close ();
closesocket(m_sclient);
this->m_listbox .AddString ("传输出错,请重新下载!!");
return;
}
myfile.Write ((const void *)buf,ret);
m_filesize -=ret;
return;
}
m_state = 'E'; //文件接收完毕;状态字:'E'
this->m_listbox .AddString ("文件接收完毕");
myfile.Close ();
return;
....
}问题是:为什么文件传输过程中,经常性的出现异常??即使C/S端都在本机上,也十有三四的出问题,客户端换成其它机子,出问题的几率更高。当传送小型的.txt文件时才不太出错.各位大虾能斑斑小弟吗?谢谢了!!!!!!
while里面连个延时的代码都没有。
发送或者接收出错,也没检查一下错误代码。还是先到网上搜搜相关代码看看吧