如何提高网络连接数量?

baoyz 2009-04-25 09:48:59
我做了一个多线程,多任务的下载软件。
多个线程同时下载多个文件(任务),每个任务都是单线程的。
现在最多同时开启10个任务。再多的话就会等待。
问如何能提高网络连接数量。比如加大到同时下载20个任务。

用(CHttpFile*)sess.OpenURL(LPCTSTR(arrUrl[i]))下载
用pHttpConn = session.GetHttpConnection(LPCTSTR(strServer), nPort)下载
都试过了。都不能超过10个任务。

系统:Microsoft Windows 5.1.2600 Service Pack 3
tcpip.sys的版本: 5.1.2600.5625.

网上常见的
1、改tcpip.sys的方法——无效。
2、用迅雷改连接,“全局最大连接数量:999”——无效。
3、用比特精灵改,“您的系统存在迸发连接数限制(当前限制: 300)!”——无效。
4、改注册表——无效。

现在是SP3好像和SP2时期不一样了。
...全文
315 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
baoyz 2009-04-27
  • 打赏
  • 举报
回复
搞定了。
1、把tcpip.SYS改大到300以上。
2、把注册表的IE并发数改到100以上。
结果就好了。
biweilun 2009-04-26
  • 打赏
  • 举报
回复
额....SP3...当我没参加过,飘
baoyz 2009-04-26
  • 打赏
  • 举报
回复
系统是深度10,GHOST版的,没打过补丁,装好就这样了。


UINT ThreadFunc(LPVOID lpParam)
{
CInternetSession sess;
CHttpFile* fileGet = NULL;
CString strSave;
int n=0,m=0;
char buf[1024];
DWORD dwStatus;
DWORD dwBuffLen;
CStdioFile fileWrite;
CFileStatus status;
BOOL bSuccess;
int i = iDowning;

while (bStart)
{
critical_section.Lock();//锁定线程
if (iStep < iNum)
{
arrUrl[i] = arrUrl[iStep];
arrOutFile[i] = arrOutFile[iStep];
iStep++;
}
else
{
arrUrl[i] = "";
arrOutFile[i] = "";
list1->SetItemText(i,0,"");
critical_section.Unlock();//解锁线程
break;
}
critical_section.Unlock();//解锁线程
//////////////////////////////////////////////////////////////////////////
if (arrUrl[i] != "")
{
if (CFile::GetStatus(arrOutFile[i],status)) //获得目标文件状态
{
bSuccess = false;
if (bSize)
{InternetSetOption
if(status.m_size == (long)GetPrivateProfileInt("下载记录",(arrOutFile[i].Right(arrOutFile[i].GetLength()-1-arrOutFile[i].ReverseFind('\\'))),-1,strSettingPath))
{
list1->SetItemText(i,2,":文件存在");
Sleep(200);
}
else
bSuccess = true;
}
}
else
{
bSuccess = true;
}
if (bSuccess)
{
bSuccess = false;
/************************************************************************/
/* 开始下载 */
/************************************************************************/
list1->SetItemText(i,1,arrUrl[i]);
list1->SetItemText(i,2,":文件连接");
try
{
list1->SetItemText(i,2,":开始分析");
fileGet=(CHttpFile*)sess.OpenURL(LPCTSTR(arrUrl[i]));
if (fileGet != NULL)
{
list1->SetItemText(i,2,":分析文件");
dwBuffLen = sizeof(dwStatus);
bSuccess = fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
if( bSuccess && dwStatus>= 200 && dwStatus<300 )
{
list1->SetItemText(i,2,":返回消息");
//获得文件长度
fileGet->QueryInfo(HTTP_QUERY_FLAG_NUMBER|HTTP_QUERY_CONTENT_LENGTH, &dwStatus, &dwBuffLen);
//保存长度
list1->SetItemText(i,2,":获得长度");

critical_section.Lock();//锁定线程
strSave.Format("%ld",dwStatus);
WritePrivateProfileString("下载记录",(arrOutFile[i].Right(arrOutFile[i].GetLength()-1-arrOutFile[i].ReverseFind('\\'))),strSave,strSettingPath);
list1->SetItemText(i,2,":保存长度");
critical_section.Unlock();//锁定线程

list1->SetItemText(i,2,":开始下载");
if(fileWrite.Open(arrOutFile[i], CFile::modeWrite|CFile::modeCreate|CFile::typeBinary))
{
m = 0;
iOpen++;
while((n = fileGet->Read(buf,sizeof(buf))) > 0)
{
fileWrite.Write(buf,n);
m += n;
iSpeek += n;
strSave.Format(":%d %c",int(m*100/dwStatus),'%');
list1->SetItemText(i,2,strSave);
Sleep(5);
}
fileWrite.Close();
iOpen--;
}
/************************************************************************/
/* 下载结束 */
/************************************************************************/
CFile::GetStatus(arrOutFile[i],status);
if(status.m_size != (long)dwStatus)
{
arrError.Add(arrUrl[i]);
iError++;
}
}
}
else
{
list1->SetItemText(i,2,":文件连接失败");
Sleep(200);
}
}
catch (CInternetException * e)
{
char strErr[256];
e->GetErrorMessage(strErr,sizeof(strErr));
list1->SetItemText(i,2,strErr);
e->Delete();
fileGet = NULL;
}
}
list1->SetItemText(i,1,"");
list1->SetItemText(i,2,"");
}
else
break;
::PostMessage(AfxGetMainWnd()->m_hWnd,WM_MYDO,NULL,NULL);
}
list1->SetItemText(i,0,"");
if (fileGet != NULL)
{
fileGet->Close();
}
if (sess != NULL)
{
sess.Close();
}
delete fileGet;
iDowning--;
return 1;
}


程序是这么写的,没删改。要是“采用完成端口”该加点什么呢?
qgw_2000 2009-04-25
  • 打赏
  • 举报
回复
Server端可以限制一个ip最多concurent connection,你确认下是不是服务器的限制。
  • 打赏
  • 举报
回复
汗,楼主说sp3。。当我没说。
  • 打赏
  • 举报
回复
http://leftleg.hzpub.com/post/309/

解除TCP最大并发连接数限制为10的方法
blackcat242 2009-04-25
  • 打赏
  • 举报
回复
这个应该是实现造成的,你要连接数增加,可以自己写通信的部分,采用完成端口,单机的链接可以做到过万的。
hwsts2 2009-04-25
  • 打赏
  • 举报
回复
CHttpFile 这些类是封装的WinINet ,WinINET是有并发连接数限制的,具体信息查看IE并发连接数限制

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧