前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多个网卡使用相同IP的网卡绑定

多个网卡使用相同IP的网卡绑定

作者头像
用户9736681
发布2023-02-20 16:33:35
3.8K0
发布2023-02-20 16:33:35
举报
文章被收录于专栏:嵌入式随笔嵌入式随笔

目的

多个网卡想单独使用的话可以使用不同的IP绑定,但是这样比较麻烦,也可以使用相同的IP,这样一个设备虽然有多个网卡,但只有一个IP,可以将需要的程序socket绑定到固定的网卡。这样虽然是相同的IP,但是可以独立使用了。

应用程序

代码语言:javascript
复制
int initUdpBroadCastSocket_eth0(void)
{
        struct ifreq opt1;


        const char *inface = "eth0";//根据自己的情况修改
	strncpy(opt1.ifr_name, inface,IFNAMSIZ);

	const int opt = 1;
	int nb = 0;
	struct sockaddr_in myaddr;

	int sockfd = socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP);
	if (-1 == sockfd)
	{
		return -1;
	}
	nb = setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&opt1, sizeof(opt1));
	if(nb == -1)
	{
		perror("socket_ETH0 error");
		return -1;
	}
	nb = setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
	if(nb == -1)
	{
		perror("socket_ETH0 error");
		return -1;
	}

	return sockfd;
}

int initUdpBroadCastSocket_ethyzd(void)
{
	struct ifreq opt1;

        const char *inface = "ethyzd";//根据自己的情况修改
	strncpy(opt1.ifr_name, inface,IFNAMSIZ);

        const int opt = 1;
	int nb = 0;
	struct sockaddr_in myaddr;

	int sockfd = socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP);
	if (-1 == sockfd)
	{
		return -1;
	}
	nb = setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&opt1, sizeof(opt1));
	if(nb == -1)
	{
		perror("socket_ETHyzd error");
		return -1;
	}
	nb = setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
	if(nb == -1)
	{
		perror("socket_ETHyzd error");
		return -1;
	}

	return sockfd;
}
testeth(void *arg)
{
	int recv_len, send_len;
	int ETH0_bindtest1;
	int ETHyzd_bindtest1;
	socklen_t addr_len;
	struct sockaddr_in recv_address;
	struct sockaddr_in airLC6500_addr;
	char recv_buffer1[] ={"testeth0"};
	char recv_buffer2[] ={"testethyzd"};

	ETH0_bindtest1 = initUdpBroadCastSocket_eth0();
	ETHyzd_bindtest1 = initUdpBroadCastSocket_ethyzd();

	while(1)
	{
	    
			send_len = sendUdp(ETH0_bindtest1, BROADCAST_IP, testyzd1, recv_buffer1, sizeof(recv_buffer1));
			send_len = sendUdp(ETHyzd_bindtest1, BROADCAST_IP, testyzd2, recv_buffer2, sizeof(recv_buffer2));
			sleep(1);
	}
int main(void)
{
	
	pthread_t AIRCTRL_SEND_Process_Thread;	
	
	pthread_create(&AIRCTRL_RECEIVE_Process_Tread, NULL, AIRCTRL_Data1_Recv_Process, NULL);

	/* main Task */

	while(1)
	{}
}

实验结果

绑定eth0的udp数据发送到了相应的端口上,并没有交叉发送。(另一个是虚拟的,实际发送到相应的地方去了),可见是可以相同IP独立使用的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
  • 应用程序
  • 实验结果
  • 绑定eth0的udp数据发送到了相应的端口上,并没有交叉发送。(另一个是虚拟的,实际发送到相应的地方去了),可见是可以相同IP独立使用的。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档