请写一个代码在esp32上指定监听的IP和端口号,使用C语言
时间: 2024-12-02 10:18:44 浏览: 35
在ESP32上使用C语言创建一个TCP服务器,监听特定IP地址和端口,可以使用lwip库(轻量级Internet协议栈)。下面是一个简单的示例代码,假设你已经包含了必要的 lwip 配置头文件,并且初始化了网络栈:
```c
#include "lwip/sockets.h"
#include "lwip/netdb.h"
#include "lwip/inet_pton.h"
// 定义服务器的IP地址和端口号
static const char *SERVER_IP = "192.168.0.100";
#define SERVER_PORT (1234)
int main() {
struct addrinfo hints, *servinfo, *result;
int sock, connfd;
char buffer[512] = {0};
// 初始化addrinfo结构体
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET; // IPv4
hints.ai_socktype = SOCK_STREAM; // TCP连接
hints.ai_flags = AI_PASSIVE; // 对应本地主机
if (inet_pton(AF_INET, SERVER_IP, &hints.ai_addr) == 0) {
perror("Invalid IP address");
return -1;
}
if (getaddrinfo(NULL, STRINGIFY(SERVER_PORT), &hints, &servinfo) != 0) {
perror("Failed to get address info");
return -1;
}
// 创建套接字并绑定到指定的IP和端口
sock = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol);
freeaddrinfo(servinfo); // 释放之前获取的信息
if (sock < 0) {
perror("Error creating socket");
return -1;
}
if (bind(sock, servinfo->ai_addr, servinfo->ai_addrlen) < 0) {
perror("Error binding socket");
close(sock);
return -1;
}
listen(sock, 5); // 设置最大连接数为5
printf("Server listening on %s:%d\n", SERVER_IP, SERVER_PORT);
while (true) {
// 接受新的客户端连接
connfd = accept(sock, NULL, NULL);
if (connfd < 0) {
perror("Error accepting connection");
continue;
}
// 当收到数据时处理连接
read(connfd, buffer, sizeof(buffer)); // 这里只是一个示例,实际应用中需要解析接收的数据
printf("Received message: %s\n", buffer);
close(connfd); // 关闭连接
}
close(sock);
return 0;
}
```
注意:这个例子是一个基本的TCP服务器,实际应用可能需要添加更多的错误处理和通信逻辑。此外,lwip库的使用可能会因平台和构建配置的不同而略有差异。
阅读全文