请教一个Linux系统中多IP的编程问题
Linux系统中,存在多块网卡(即有多个IP地址)。在基于UDP协议的socket网络编程时,套接字不指定IP地址。直接用sendto函数发送数据,数据会从哪个IP地址发送出去呢,系统对这IP的选择有什么样策略吗?系统选择哪个IP地址我们能否事先知道。请各位指教,谢谢了。下面给了个例子:
/**********************************************************/
#include <netinet/in.h>
int main()
{
int sock,i;
char buff[100];
struct sockaddr_in address;
address.sin_family=AF_INET;
address.sin_port=htons(5678);
address.sin_addr.s_addr=inet_addr( "192.168.0.103 ");
strcpy(buff, "Good ");
sock=socket(AF_INET,SOCK_DGRAM,0);
if(sendto(sock,buff,500,0,(struct sockaddr *)&address,sizeof(address)))
{
puts( "Sended! ");
}
close(sock);
}
[解决办法]
系统选择哪个IP地址我们能否事先知道
==========================
你可以自己控制.選擇權在你得手里
[解决办法]
如果說非要研究是哪個網卡先其作用哪麼
還是看看你linux內核種網卡驅動列表順序.
[解决办法]
来源哪里就发向哪里。
例如一个内网网卡,一个外网网卡,若是外网连接系统会用外网网卡发送,若是内网连接系统会用内网网卡发送。因此没必要管是哪个网卡发送的。
例如:
eth0:192.168.0.123
eth1:192.168.1.123
那么你发给192.168.0.103自然就是用eth0发送数据了。