打印
[STM32F0]

Socket 编程

[复制链接]
35|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvuu|  楼主 | 2024-12-11 07:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

489

帖子

0

粉丝