LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 874|回复: 6

请教一个Linux系统中多IP地址编程的问题!

[复制链接]
发表于 2007-6-26 09:36:34 | 显示全部楼层 |阅读模式
Linux系统中,存在多块网卡(即有多个IP地址)。在基于UDP协议的socket网络编程时,套接字不指定IP地址。直接用sendto函数发送数据,数据会从哪个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);
}
发表于 2007-6-26 10:58:12 | 显示全部楼层
根据你的路由表
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-26 13:33:05 | 显示全部楼层
Post by x11
根据你的路由表

能不能详细的说说呀,谢谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-26 14:32:30 | 显示全部楼层
假设本地有两个网卡,地址分别是:192.168.0.100和192.168.0.200。如果路由表中指定数据包要通过网卡192.168.0.100发送出去,但是我在socket bind的时候绑定了本地地址192.168.0.200这个时候应该是从哪个网卡发送出去呢,
回复 支持 反对

使用道具 举报

发表于 2007-6-26 14:45:07 | 显示全部楼层
这种情况不知道,没仔细读过tcp/ip
不过你没必要bind,不bind就能自动选择
还有多网卡时最好各网卡用不同网段的地址
回复 支持 反对

使用道具 举报

发表于 2007-6-26 15:06:12 | 显示全部楼层
请教了一下高人
假设本地有两个网卡,地址分别是:192.168.0.100和192.168.0.200。如果路由表中指定数据包要通过网卡 192.168.0.100发送出去,但是我在socket bind的时候绑定了本地地址192.168.0.200这个时候应该是从哪个网卡发送出去呢
答案是从192.168.0.100,因为路由选择和源地址无关
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-26 15:24:18 | 显示全部楼层
我知道了。问题已解决,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表