首页  编辑  

同时支持多个网络连接

Tags: /超级猛料/Network.网络通讯/其它/   Date Created:

Windows下同时支持多个网络连接(Multi-Homed, Multi-Cast)?

在编程的时候,我们可能碰到需要处理多个网络连接的情况,例如两个拨号网络,我们可以分别走不同的连接来上网,Windows本身是不支持的。但我们可以利用以下的方法来实现:

1:修改Windows的路由表来实现指定的路由。

2:在Socket绑定的时候,绑定网关即可。

原理:

Windows的每个网络接口有一个Metric,也就是接口跃点数,其含义是,可以手动给某个连接,设定其中间经过的代理或者网关的个数,目的是让Windows自动选定一个比较快的网关来传输数据,但Windows在实际上引用的时候,默认是第一个的网络连接跃点数为1,后来拨号的接口的跃点数会变化,也就是变成2或者其他的数值,这样Windows在多个网络连接后,总是使用Metric为1的网络连接来传输数据!实际上,对本机器来说,多个拨号网络连接后,其Metric都是一样的,都应该为1,因此我们修改这个路由表,把Metric都改成1,这样Windows就能够选择路由的时候,把所有连接同优先级对待了。当然这样还是不够的,因为Windows还无法区分该利用那个网络连接来传输数据。因此我们在Bind Socket的时候,需要指定一个默认的网关,这样一旦Socket建立成功,对所有Metric相同的连接,Windows总是使用默认的网关来传输数据,也就是达到可以同时支持多个网络的目的了。

具体代码如下:

在拨号网络连接建立之后,首先获取该拨号的公网IP地址和网关地址,然后调用

route add 0.0.0.0 mask 0.0.0.0 网关地址 metric 1

在绑定Socket的时候,请务必指定绑定的IP地址和网关,这样就能够同时支持多个网络连接了。

在Linux平台,可以直接绑定的时候指定网卡或网络接口,完全可以独立传输,并不用这么麻烦的。