我板卡的双网卡分别是192.168.2.111、192.168.1.111,假设他们分别接收来自192.168.2.2、192.168.1.10的数据。
#include#include #include #include #include #include #include #include #include int main(void) { int udp_socket_fd = socket(AF_INET,SOCK_DGRAM,0); if(udp_socket_fd < 0) { printf("create socket failn"); return -1; } //2.设置UDP的地址并绑定 struct sockaddr_in local_addr = {0}; local_addr.sin_family = AF_INET; //使用IPv4协议 local_addr.sin_port = htons(161); //网络通信都使用大端格式 local_addr.sin_addr.s_addr = INADDR_ANY;//让系统检测本地网卡,自动绑定本地IP //设置目的IP地址 struct sockaddr_in dest_addr = {0}; dest_addr.sin_family = AF_INET;//使用IPv4协议 dest_addr.sin_port = htons(161);//设置接收方端口号 int ret = bind(udp_socket_fd,(struct sockaddr*)&local_addr,sizeof(local_addr)); if(ret < 0) { perror("bind fail:"); close(udp_socket_fd); return -1; } struct sockaddr_in src_addr = {0}; //用来存放对方(信息的发送方)的IP地址信息 int len = sizeof(src_addr); //地址信息的大小 char buf[1024] = {0};//消息缓冲区 while(1) { ret = recvfrom(udp_socket_fd, buf, sizeof(buf), 0, (struct sockaddr *)&src_addr, &len); if(ret == -1) { break; } printf("[%s:%d]",inet_ntoa(src_addr.sin_addr),ntohs(src_addr.sin_port));//打印消息发送方的ip与端口号 printf("buf=%sn",buf); if(strcmp(inet_ntoa(src_addr.sin_addr),"192.168.2.2") == 0) { dest_addr.sin_addr.s_addr = inet_addr("192.168.1.10"); //设置接收方IP sendto(udp_socket_fd, buf, strlen(buf), 0, (struct sockaddr *)&dest_addr,sizeof(dest_addr)); } if(strcmp(inet_ntoa(src_addr.sin_addr),"192.168.1.10") == 0) { dest_addr.sin_addr.s_addr = inet_addr("192.168.2.2"); //设置接收方IP sendto(udp_socket_fd, buf, strlen(buf), 0, (struct sockaddr *)&dest_addr,sizeof(dest_addr)); } if(strcmp(buf, "exit") == 0) { break; } memset(buf, 0, sizeof(buf));//清空存留消息 } close(udp_socket_fd); }



