在linux下 获取,修改本机IP地址的两个函数

//获取本机IP地址函数

  

//修改本机IP地址的函数

  

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
要在Linux上使用UDP协议绑定两个IP地址和端口,可以使用以下步骤: 1. 创建两个socket,每个socket使用socket()函数。 2. 使用setsockopt()函数设置每个socket的SO_REUSEADDR选项,以便可以在同一台计算上使用相同的端口。 3. 使用bind()函数将每个socket绑定到不同的IP地址和端口。 以下是一个简单的示例代码,用于绑定两个IP地址和端口: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #define BUF_SIZE 30 void error_handling(char *message); int main(int argc, char *argv[]) { int sock1, sock2; struct sockaddr_in addr1, addr2; char buf[BUF_SIZE]; int str_len; socklen_t adr_sz; if (argc != 4) { printf("Usage: %s <IP1> <port1> <port2>\n", argv[0]); exit(1); } sock1 = socket(PF_INET, SOCK_DGRAM, 0); sock2 = socket(PF_INET, SOCK_DGRAM, 0); if (sock1 == -1 || sock2 == -1) error_handling("socket() error"); memset(&addr1, 0, sizeof(addr1)); addr1.sin_family = AF_INET; addr1.sin_addr.s_addr = inet_addr(argv[1]); addr1.sin_port = htons(atoi(argv[2])); memset(&addr2, 0, sizeof(addr2)); addr2.sin_family = AF_INET; addr2.sin_addr.s_addr = inet_addr(argv[1]); addr2.sin_port = htons(atoi(argv[3])); if (setsockopt(sock1, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) == -1 || setsockopt(sock2, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) == -1) error_handling("setsockopt() error"); if (bind(sock1, (struct sockaddr*)&addr1, sizeof(addr1)) == -1 || bind(sock2, (struct sockaddr*)&addr2, sizeof(addr2)) == -1) error_handling("bind() error"); while (1) { adr_sz = sizeof(addr1); str_len = recvfrom(sock1, buf, BUF_SIZE - 1, 0, (struct sockaddr*)&addr1, &adr_sz); buf[str_len] = 0; printf("Message from %s:%d - %s\n", inet_ntoa(addr1.sin_addr), ntohs(addr1.sin_port), buf); adr_sz = sizeof(addr2); str_len = recvfrom(sock2, buf, BUF_SIZE - 1, 0, (struct sockaddr*)&addr2, &adr_sz); buf[str_len] = 0; printf("Message from %s:%d - %s\n", inet_ntoa(addr2.sin_addr), ntohs(addr2.sin_port), buf); } close(sock1); close(sock2); return 0; } void error_handling(char *message) { fputs(message, stderr); fputc('\n', stderr); exit(1); } ``` 在此示例中,我们使用两个socket(sock1和sock2)分别绑定到两个不同的IP地址和端口。对于每个socket,我们使用setsockopt()函数设置SO_REUSEADDR选项,以便可以在同一台计算上使用相同的端口。最后,我们使用bind()函数将每个socket绑定到不同的IP地址和端口。 在while循环中,我们使用recvfrom()函数从每个socket接收数据,并输出接收到的数据以及发送方的IP地址和端口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值