问题描述
建立一个Socket绑定到IPAddress.Any的50000端口(ss),本地有一网卡网卡有多个IP,例如有以下几个ip192.168.0.10192.168.0.20192.168.0.30三个IP,10为主IP,直接只用ss.SendTo发送UDP数据包出去使用的是主IP的身份,怎样灵活的在以上三个IP中切换发送时的IP身份?
解决方案
解决方案二:
参考:usingSystem;usingSystem.Management;namespaceArLi.CommonPrj{publicclassChangeIP{///<summary>///BuildofArLi2003.6.3///</summary>publicstaticreadonlySystem.VersionmyVersion=newSystem.Version(1,1);privateManagementBaseObjectiObj=null;privateManagementBaseObjectoObj=null;privateManagementClassmc=newManagementClass("Win32_NetworkAdapterConfiguration");privatereadonlyManagementObjectCollectionmoc;///<summary>///例:///<code>///ArLi.CommonPrj.ChangeIPo=newArLi.CommonPrj.ChangeIP();///string[]ipList=newstring[]{"192.168.0.253","192.168.0.250"};///string[]subnetList=newstring[]{"255.255.255.0","255.255.255.0"};///o.ChangeTo(ipList,subnetList);///</code>///</summary>publicChangeIP(){moc=mc.GetInstances();}///<summary>控制连接</summary>///<paramname="ipAddr">IP地址列表</param>///<paramname="subnetMask">对应子网掩码列表</param>publicvoidChangeTo(string[]ipAddr,string[]subnetMask){foreach(ManagementObjectmoinmoc){if(!(bool)mo["IPEnabled"])continue;iObj=mo.GetMethodParameters("EnableStatic");iObj["IPAddress"]=ipAddr;iObj["SubnetMask"]=subnetMask;oObj=mo.InvokeMethod("EnableStatic",iObj,null);}}///<summary>控制连接</summary>///<paramname="ipAddr">IP地址列表</param>///<paramname="subnetMask">对应子网掩码列表</param>///<paramname="gateways">网关列表</param>///<paramname="gatewayCostMetric">网关接口跃点数列表</param>publicvoidChangeTo(string[]ipAddr,string[]subnetMask,string[]gateways,string[]gatewayCostMetric){foreach(ManagementObjectmoinmoc){if(!(bool)mo["IPEnabled"])continue;iObj=mo.GetMethodParameters("EnableStatic");iObj["IPAddress"]=ipAddr;iObj["SubnetMask"]=subnetMask;oObj=mo.InvokeMethod("EnableStatic",iObj,null);iObj=mo.GetMethodParameters("SetGateways");iObj["DefaultIPGateway"]=gateways;iObj["GatewayCostMetric"]=gatewayCostMetric;oObj=mo.InvokeMethod("SetGateways",iObj,null);}}///<summary>控制连接</summary>///<paramname="ipAddr">IP地址列表</param>///<paramname="subnetMask">对应子网掩码列表</param>///<paramname="gateways">网关列表</param>///<paramname="gatewayCostMetric">网关接口跃点数列表</param>///<paramname="dnsServer">DNS服务器列表</param>publicvoidChangeTo(string[]ipAddr,string[]subnetMask,string[]gateways,string[]gatewayCostMetric,string[]dnsServer){foreach(ManagementObjectmoinmoc){if(!(bool)mo["IPEnabled"])continue;iObj=mo.GetMethodParameters("EnableStatic");iObj["IPAddress"]=ipAddr;iObj["SubnetMask"]=subnetMask;oObj=mo.InvokeMethod("EnableStatic",iObj,null);iObj=mo.GetMethodParameters("SetGateways");iObj["DefaultIPGateway"]=gateways;iObj["GatewayCostMetric"]=gatewayCostMetric;oObj=mo.InvokeMethod("SetGateways",iObj,null);iObj=mo.GetMethodParameters("SetDNSServerSearchOrder");iObj["DNSServerSearchOrder"]=dnsServer;oObj=mo.InvokeMethod("SetDNSServerSearchOrder",iObj,null);}}///<summary>控制连接,使它使用DHCP</summary>publicvoidEnableDHCP(){foreach(ManagementObjectmoinmoc){if(!(bool)mo["IPEnabled"])continue;if(!(bool)mo["DHCPEnabled"]){iObj=mo.GetMethodParameters("EnableDHCP");oObj=mo.InvokeMethod("EnableDHCP",iObj,null);}}}}}
解决方案三:
楼上的CathySun118理解错了意思
解决方案四:
顶楼主你一下。另外招版主,或合作管理员,有兴趣的加群4228406
解决方案五:
你要指定地址的话,绑定的时候就不要使用IPAddress.Any,而是应该与具体的地址绑定。
解决方案六:
该回复于2008-11-26 10:35:32被版主删除
解决方案七:
绑定的时候就不要使用IPAddress.Any,而是应该与具体的地址绑定如果这样做的话,我要帮定好多IP地址
解决方案八:
需要使用哪个地址发送数据,就绑定到哪个,怎么会要绑定好多呢?
解决方案九:
我要是有20个公网IP地址,那不是要帮定20个socket
解决方案十:
我现在就是用绑定固定IP的方式,但Socket太多,我想只绑定一个0.0.0.0的这个IP地址。
解决方案十一:
不管你有多少个IP,需要用哪个发数据,就绑定哪个,绑定以后的Socket就以该IP发送数据。当然,你喜欢把这些个IP都一次性地绑定到对应的Socket上,只要你不嫌麻烦,我也没意见。