Socket 编程是一种通过网络协议(如 TCP/IP)进行进程间通信的方式。通过 STM32 和 LwIP 协议栈,你可以在 STM32 上实现基于 TCP 或 UDP 的网络通信。
3.1 创建和绑定套接字(Socket)
创建一个 TCP 或 UDP 套接字,通过套接字进行数据的发送和接收。这里以 TCP 为例,展示如何在 STM32 上进行 Socket 编程。
c
复制代码
#include "lwip/sockets.h"
int server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len = sizeof(client_addr);
void TCP_Server_Init() {
// 创建套接字
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket < 0) {
printf("Socket 创建失败\n");
return;
}
// 设置服务器地址
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(12345); // 端口号
server_addr.sin_addr.s_addr = INADDR_ANY; // 监听所有网卡
// 绑定套接字到端口
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
printf("绑定失败\n");
return;
}
// 启动监听
if (listen(server_socket, 1) < 0) {
printf("监听失败\n");
return;
}
// 接受连接请求
client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_len);
if (client_socket < 0) {
printf("接受连接失败\n");
return;
}
printf("客户端连接成功\n");
}
void TCP_Server_Handle() {
char buffer[1024];
int bytes_received;
// 接收数据
bytes_received = recv(client_socket, buffer, sizeof(buffer), 0);
if (bytes_received > 0) {
printf("接收到数据: %s\n", buffer);
// 回应客户端
send(client_socket, "Hello, Client!", 15, 0);
}
}
3.2 客户端通信
客户端通过 TCP 套接字连接到服务器,并发送数据。
c
复制代码
void TCP_Client_Init() {
int client_socket;
struct sockaddr_in server_addr;
// 创建套接字
client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket < 0) {
printf("客户端套接字创建失败\n");
return;
}
// 配置服务器地址
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(12345); // 服务器端口号
server_addr.sin_addr.s_addr = inet_addr("192.168.1.100"); // 服务器 IP
// 连接到服务器
if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
printf("连接服务器失败\n");
return;
}
// 发送数据
send(client_socket, "Hello, Server!", 15, 0);
close(client_socket);
}
|