HTTP协议在接收数据的时候发现总是收不到正确的数据,请大家进来看看~ 用我们自己的TCP/IP协议栈写了个HTTP下载的程序,在接收服务器发送过来的数据的时候老是收不到正确的数据。有的时候能收完。。但是时间非常长了。。一个3M的文件要花费5分多钟还是在内部局域网搭建的HTTP服务器和客户端哦。。不知道是我们的协议栈没写还是其他原因额。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你用HTTP发文件似乎不太合适,应该是用FTP,或者直接用TCP/IP,UDP/IP发,你说呢估计是你协议有问题,也有可能是你的程序效率太低,用多线程实现的吗 肯定是你的代码的问题,你是用MFC的CHttpFile还是直接用Socket来写的?给你一个用cHttpFile来下载一个文件的函数例子吧://****************************************************************************************////函数 GetWebContent//主要功能: Get方式向服务器传数据//参数列表: //返回值: //备注: //****************************************************************************************//void GetFileContent(CString strURL, char *szFileName){ CInternetSession sess;//Create session CHttpFile* fileGet; CException* e = NULL; TRY { fileGet=(CHttpFile*)sess.OpenURL(strURL);//Open file } CATCH_ALL(e) { fileGet = 0; } END_CATCH_ALL if(fileGet) { DWORD dwStatus; DWORD dwBuffLen = sizeof(dwStatus); BOOL bSuccess = fileGet->QueryInfo( HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen); if( bSuccess && dwStatus>= 200&& dwStatus<300 ) { FILE *f; f = fopen(szFileName, "wb"); char buffer[1024]; int nSize = fileGet->Read(buffer, 1024); while(nSize > 0) { fwrite(buffer, sizeof(char), nSize, f); nSize = fileGet->Read(buffer, 1024); } fclose(f); }// if bSuccess. fileGet->Close(); delete fileGet; } else { TRACE0("对不起,连接超时,无法打开站点!"); } sess.Close();} 晕,自己实现的HTTP,跟踪调试不就知道了么最多加个日志功能,就可以知道时间消耗在哪里 关于FFT变换程序 VC怎样让子窗口自适应图片大小打开? 获取对话框的ID用什么函数 可以通过实例句柄找窗口句柄吗? 受MM之拖,找个叫“张健”的人,兄弟们帮帮忙啊 知道其下落的,“当面重谢”!(又来打广告??T。。) 如何通过程序设置让一个文件属性为"隐藏". 在CComboBox里加了aa,bb,cc等字符,点箭头为什么列表不显示出来? 请问,软件工程哪本书最好呀给小弟说说,还有,UML是什么东西,用什么工具。送分在线等 利用snmp取电脑的状态如cpu 内存等 RichEdit CHARFORMATW 设置字体问题 关于未知领域的迷茫 请问IOCP模式下为什么可以发送,不可以接收呢
估计是你协议有问题,也有可能是你的程序效率太低,用多线程实现的吗
给你一个用cHttpFile来下载一个文件的函数例子吧://****************************************************************************************//
//函数 GetWebContent
//主要功能: Get方式向服务器传数据
//参数列表:
//返回值:
//备注:
//****************************************************************************************//
void GetFileContent(CString strURL, char *szFileName)
{
CInternetSession sess;//Create session
CHttpFile* fileGet;
CException* e = NULL;
TRY
{
fileGet=(CHttpFile*)sess.OpenURL(strURL);//Open file
}
CATCH_ALL(e)
{
fileGet = 0;
}
END_CATCH_ALL if(fileGet)
{
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bSuccess = fileGet->QueryInfo(
HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
&dwStatus, &dwBuffLen); if( bSuccess && dwStatus>= 200&& dwStatus<300 )
{
FILE *f;
f = fopen(szFileName, "wb");
char buffer[1024];
int nSize = fileGet->Read(buffer, 1024);
while(nSize > 0)
{
fwrite(buffer, sizeof(char), nSize, f);
nSize = fileGet->Read(buffer, 1024);
}
fclose(f);
}// if bSuccess.
fileGet->Close();
delete fileGet;
}
else
{
TRACE0("对不起,连接超时,无法打开站点!");
}
sess.Close();
}
最多加个日志功能,就可以知道时间消耗在哪里