本笔记学习 Zephyr 的 Socket API,用于 TCP/UDP 网络编程。
zephyr/samples/net/sockets/tcp/ - TCP 示例
zephyr/samples/net/sockets/echo/ - UDP 回显
| 类型 | 协议 | 用途 |
|---|---|---|
| SOCK_STREAM | TCP | 可靠连接 |
| SOCK_DGRAM | UDP | 无连接传输 |
#include <zephyr/posix/sys/socket.h>
#include <zephyr/net/socket.h>
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // TCP
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // UDP
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(4242);
bind(sock, (struct sockaddr *)&addr, sizeof(addr));
void udp_server(void)
{
int sock = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(4242);
bind(sock, (struct sockaddr *)&addr, sizeof(addr));
while (1) {
char buf[1024];
struct sockaddr_in client;
socklen_t len = sizeof(client);
ssize_t n = recvfrom(sock, buf, sizeof(buf), 0,
(struct sockaddr *)&client, &len);
sendto(sock, buf, n, 0, (struct sockaddr *)&client, len);
}
}
void tcp_client(void)
{
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(4242);
inet_pton(AF_INET, "192.168.1.100", &server.sin_addr);
connect(sock, (struct sockaddr *)&server, sizeof(server));
send(sock, "Hello", 5, 0);
close(sock);
}
*小白 🤖 - 2026-03-16*