same
解决方案 »
- 求助:调用msword9.cpp时出现的问题
- 如何用Installshield打包含有Access数据库的程序
- 为什么文本框最多显示127个字节?
- 公司想找個兼職,有沒有東莞虎門附近的朋友.
- 一个关于属性页的问题
- 刚才干了件傻事情!竟然在这里贴大东西!下次放到BLOG去了!帮我顶的人进来拿分!(大家帮我指点指点啊!!)
- 急!请教高手:切分窗口弹出对话框后焦点的处理流程
- 哪位大侠知道如何编程实现在要打印的文档上打印水印啊?
- 我在formview上做动画,动画刷新的时候虽然描画部分不抖动,可是formview上的控件却出现抖动,如何抑制控件的抖动?
- 这句语句Release编译通不过,debug下没问题,很急,请帮忙!
- 恭喜CSDN改版成功,恭喜本人加入VC大家庭,散分........
- 如何改变最小化按钮的作用。
UINT MyRecvFileThread(LPVOID pParam)
{
CSocket_sdk_sDlg *pDlg=(CSocket_sdk_sDlg *)pParam;
CTime tm=CTime::GetCurrentTime();
CString strtime;
CString strfilename;
strtime.Format("%d%d%d%d%d%d",tm.GetYear(),tm.GetMonth(),tm.GetDay(),tm.GetHour(),tm.GetMinute(),tm.GetSecond()); CFileDialog dlg(false); //另存文件
int ret=recv(pDlg->sclientRev,(char*)&pDlg->m_finfo,sizeof(pDlg->m_finfo),0);
if (ret==SOCKET_ERROR)
return 0;
strfilename=pDlg->m_finfo.strfilename;
int nfileLength=pDlg->m_finfo.nfilelength;
char fileme[500]={0};//必须足够大小
CString szRevFilename=strtime+strfilename;
strcpy(fileme,szRevFilename);
dlg.m_ofn.lpstrFile=fileme; //文件名称 if(dlg.DoModal()==IDOK)
pDlg->m_szFilepath=dlg.GetPathName(); //得到文件名名称、路径
int n=0;
char buf[1024]={0};
CFile f(pDlg->m_szFilepath,CFile::modeCreate|CFile::modeWrite); //存文件
for(;;)
{
n=recv(pDlg->sclientRev,buf,1024,0); //接受
if(n==SOCKET_ERROR)
{
AfxMessageBox("error");
break;
}
if(n==0) //0表示结束
break; //接受完毕
f.Write(buf,n);
}
f.Close();
return 0;
}
/////发送
UINT MySendFileThread(LPVOID pParam)
{
CProxyDemoDlg *pDlg=(CProxyDemoDlg *)pParam;
char m_buf[1024]={0};
int num=0;
CFile myFile;
if(!myFile.Open(pDlg->m_szFilepath, CFile::modeRead |CFile::typeBinary))
return -1;
pDlg->m_finfo.nfilelength=myFile.GetLength(); //得到文件大小
strcpy(pDlg->m_finfo.strfilename,myFile.GetFileName());//得到文件名称
int ret=send(pDlg->sclient,(char*)&pDlg->m_finfo,sizeof(pDlg->m_finfo),0);//发送文件信息
if (ret==SOCKET_ERROR)
{
AfxMessageBox("Send() Error!");
return 0;
}
myFile.Seek(0,CFile::begin);
for(;;)
{
num=myFile.Read(m_buf,1024);
if(num<=0) break;
send(pDlg->sclient,m_buf,num,0);
}
myFile.Close();
return 0;
}
..
send(pDlg->sclient,m_buf,num,0);
后加:Sleep(200);试试
break;你这个判断有问题. 最好的传文件办法是应该在传文件之前将文件大小等信息传过来,然后接收端根据已接收的文件大小来判断是否接收完毕,最好发送端发送完成后,还发一个BYEBYE的标志,
或许接收文件属性时也接收了一部分文件内容试试 tyong(坏男孩) 或者 flashboy(爱写程序的小绵羊) 的办法
TCP没这个问题吧??