linux udp 绑两个ip和端口
时间: 2023-07-26 07:08:14 浏览: 121
在 Linux 上,可以使用 `bind()` 函数将一个 UDP 套接字绑定到指定的 IP 地址和端口号。如果要绑定两个 IP 地址和端口号,可以按照以下步骤:
1. 创建 UDP 套接字:
```
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
```
2. 填充本地地址结构体:
```
struct sockaddr_in local_addr1, local_addr2;
memset(&local_addr1, 0, sizeof(local_addr1));
memset(&local_addr2, 0, sizeof(local_addr2));
local_addr1.sin_family = AF_INET;
local_addr1.sin_addr.s_addr = inet_addr("192.168.0.100"); // 第一个 IP 地址
local_addr1.sin_port = htons(8000); // 第一个端口号
local_addr2.sin_family = AF_INET;
local_addr2.sin_addr.s_addr = inet_addr("192.168.0.101"); // 第二个 IP 地址
local_addr2.sin_port = htons(8001); // 第二个端口号
```
3. 绑定套接字到第一个地址:
```
bind(sockfd, (struct sockaddr *)&local_addr1, sizeof(local_addr1));
```
4. 使用 `setsockopt()` 函数设置重复绑定选项(`SO_REUSEADDR`):
```
int reuse = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
```
5. 再次绑定套接字到第二个地址:
```
bind(sockfd, (struct sockaddr *)&local_addr2, sizeof(local_addr2));
```
现在,该 UDP 套接字已经绑定到了两个 IP 地址和端口号。你可以使用 `sendto()` 函数发送数据包,使用 `recvfrom()` 函数接收数据包。注意要根据目标地址和端口号选择发送和接收的套接字。
阅读全文