linux c语言udp 调用配置文件中的ip绑定socket
时间: 2024-02-12 13:07:08 浏览: 124
好的,以下是一个简单的示例代码,可以实现你想要的功能:
假设你的配置文件 `config.txt` 存放了 IP 地址和端口号,格式如下:
```
IP=192.168.1.10
PORT=12345
```
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define CONFIG_FILE "config.txt" // 配置文件路径
#define BUFSIZE 1024 // 接收缓冲区大小
int main(int argc, char *argv[]) {
int sockfd;
struct sockaddr_in server_addr, client_addr;
char recv_buf[BUFSIZE];
char ip[16]; // 存放配置文件中的 IP 地址
int port; // 存放配置文件中的端口号
// 打开配置文件
FILE *fp = fopen(CONFIG_FILE, "r");
if (fp == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
// 读取配置文件中的 IP 和端口号
char line[256];
while (fgets(line, sizeof(line), fp) != NULL) {
if (strncmp(line, "IP=", 3) == 0) {
sscanf(line + 3, "%s", ip);
} else if (strncmp(line, "PORT=", 5) == 0) {
sscanf(line + 5, "%d", &port);
}
}
fclose(fp);
// 创建UDP socket
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
// 设置本地地址和端口
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(ip);
server_addr.sin_port = htons(port);
if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind");
exit(EXIT_FAILURE);
}
printf("Server listening on %s:%d\n", inet_ntoa(server_addr.sin_addr), ntohs(server_addr.sin_port));
// 循环接收数据
socklen_t client_addr_len;
while (1) {
memset(recv_buf, 0, BUFSIZE);
client_addr_len = sizeof(client_addr);
if (recvfrom(sockfd, recv_buf, BUFSIZE, 0, (struct sockaddr *)&client_addr, &client_addr_len) < 0) {
perror("recvfrom");
exit(EXIT_FAILURE);
}
printf("Received message from %s:%d: %s\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), recv_buf);
}
// 关闭socket
close(sockfd);
return 0;
}
```
这个示例代码使用了 Linux 的 socket API,读取了配置文件中的 IP 地址和端口号,并使用这些信息设置了本地地址和端口。然后,创建了一个 UDP socket,并绑定到指定的地址和端口上。最后,使用一个循环接收数据,并打印发送方的地址和端口号以及接收到的消息。你可以根据自己的需求进行修改和扩展。
阅读全文