请问多连接传输问题

skywind 2003-08-28 03:14:42
我的机器有好多个连接设备(GPRS)还有网卡都可以用,

由于连接速度的原因,程序必须考虑多个设备同时工作。进行传输
但是在他们都工作的情况下,我下载也好,上网也好,只有其中
一个连接会工作(连接图标只有一个在闪烁,即便使用flashget中的多线程下载)

我从程序上列举当前机器的所有IP为所有IP建立一一对应之socket
然后bind到对应IP,接着用这些socket都去connect一个地址。

实验发现,当所有socket都向外传送的时候,也只有一个连接在工作,
首先速度和一个连接没有区别,其次,连接图标也只有一个在闪烁。
可见这个bind没有取到意想的效果


记得IE中可以指定一个默认的连接,我想在程序中不但建立一一
对应之socket,并且实现真正意义上的bind,让每一个socket建立在不同
的连接上面,不知道从编程的角度出发,与从配置的角度出发怎么解决这个
问题,

提点小弟,谢谢了
...全文
54 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Skt32 2003-10-03
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <IPIfCons.h>
#include "Iphlpapi.h"
#pragma comment(lib,"Iphlpapi")

void Print_IP_ADAPTER_INFO(IP_ADAPTER_INFO* pAdapterInfo);
void Print_IP_ADDR_STRING(IP_ADDR_STRING* paddr);
int main(int argc, char* argv[])
{
PIP_ADAPTER_INFO pAdapterInfo = NULL;
PIP_ADAPTER_INFO pOriginalPtr;
ULONG ulSizeAdapterInfo = 0;
DWORD dwStatus;

// Find out how big our buffer needs to be to hold the data
dwStatus = GetAdaptersInfo(pAdapterInfo, &ulSizeAdapterInfo);
if (dwStatus == ERROR_BUFFER_OVERFLOW) {
// Allocate a buffer of the appropriate size
if (!(pAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulSizeAdapterInfo))) {
printf("\n Insufficient Memory ");
return(1);
}
// Obtain the Adapter Info
dwStatus = GetAdaptersInfo(pAdapterInfo, &ulSizeAdapterInfo);
}

if (dwStatus != ERROR_SUCCESS) {
return(1);
}

pOriginalPtr = pAdapterInfo;

if (pAdapterInfo == NULL)
printf("\n No Interfaces Present.\n");
else
{
// Step through the adapter list
while (pAdapterInfo != NULL)
{
Print_IP_ADAPTER_INFO(pAdapterInfo);
pAdapterInfo = pAdapterInfo->Next;
}
}
return 0;
}

void Print_IP_ADAPTER_INFO(IP_ADAPTER_INFO* pAdapterInfo)
{
if(pAdapterInfo==NULL)
return;
printf("\tAdapterName:%s\n",pAdapterInfo->AdapterName);
printf("\tDescription:%s\n",pAdapterInfo->Description);
printf("\tAddressLength:%d\n",pAdapterInfo->AddressLength);
printf("\tAdrress:");
for(int i=0 ; i< pAdapterInfo->AddressLength ; i++)
{
BYTE b=pAdapterInfo->Address[i];
printf("%02x",b);
}
printf("\n");
printf("\tAdapterIndex:%d\n",pAdapterInfo->Index);
printf("\tAdapter Type:");
switch(pAdapterInfo->Type)
{
case MIB_IF_TYPE_OTHER :
printf("MIB_IF_TYPE_OTHER \n");
break;
case MIB_IF_TYPE_ETHERNET :
printf("MIB_IF_TYPE_ETHERNET \n");
break;
case MIB_IF_TYPE_TOKENRING :
printf("MIB_IF_TYPE_TOKENRING \n");
break;
case MIB_IF_TYPE_FDDI :
printf("MIB_IF_TYPE_FDDI \n");
break;
case MIB_IF_TYPE_PPP :
printf("MIB_IF_TYPE_PPP \n");
break;
case MIB_IF_TYPE_LOOPBACK :
printf("MIB_IF_TYPE_LOOPBACK \n");
break;
case MIB_IF_TYPE_SLIP :
printf("MIB_IF_TYPE_SLIP \n");
break;
default:
printf("unknown\n");
break;
}

printf("\tDHCPEnabled:%d\n",pAdapterInfo->DhcpEnabled);
printf("\tCurrentIPAddress:");
Print_IP_ADDR_STRING(pAdapterInfo->CurrentIpAddress);
printf("\tIpAddressList:");
Print_IP_ADDR_STRING(&(pAdapterInfo->IpAddressList));
printf("\tGatewayList:");
Print_IP_ADDR_STRING(&(pAdapterInfo->GatewayList));
printf("\tDhcpServer:");
Print_IP_ADDR_STRING(&(pAdapterInfo->DhcpServer));
if(pAdapterInfo->HaveWins)
{
printf("\tHaveWins\n");
printf("\tPrimaryWinsServer:");
Print_IP_ADDR_STRING(&(pAdapterInfo->PrimaryWinsServer));
printf("\tSecondaryWinsServer:");
Print_IP_ADDR_STRING(&(pAdapterInfo->SecondaryWinsServer));
}
else
printf("\tHaveWins---FALSE\n");
printf("\n");
}
void Print_IP_ADDR_STRING(IP_ADDR_STRING* paddr)
{
if(paddr==NULL)
printf("\n");
while(paddr)
{
printf("IPAdress:%s,IPMask:%s,context:%d\n",paddr->IpAddress.String,paddr->IpMask.String,paddr->Context);
paddr=paddr->Next;
}
}
lucky2all 2003-08-29
  • 打赏
  • 举报
回复
几点疑问:
1。双网卡代理机器不是同时工作的吗?
2。你开多个线程尽可能提高发送速度,有没有分析过网络带宽的实际占用率?

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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