以下是一个示例代码,同时创建一个服务端和客户端:

#include "lwip/opt.h"
#include "lwip/api.h"
#include "lwip/sys.h"
#include "lwip/sockets.h"
#include "lwip/inet.h"

#define SERVER_PORT 1234
#define CLIENT_PORT 5678

static void server_thread(void *arg)
{
    struct netconn *conn, *newconn;
    err_t err;
    char buffer[1024];

    // 创建一个新的连接
    conn = netconn_new(NETCONN_TCP);
    if (conn != NULL) {
        // 绑定到指定端口
        err = netconn_bind(conn, NULL, SERVER_PORT);
        if (err == ERR_OK) {
            // 监听连接请求
            err = netconn_listen(conn);
            if (err == ERR_OK) {
                while (1) {
                    // 等待新的连接
                    err = netconn_accept(conn, &newconn);
                    if (err == ERR_OK) {
                        // 读取客户端发送的数据
                        err = netconn_recv(newconn, &buffer, sizeof(buffer), NETCONN_COPY);
                        if (err == ERR_OK) {
                            // 处理数据
                            printf("Received data: %s\n", buffer);
                            // 发送响应数据
                            err = netconn_write(newconn, "Hello from server!", sizeof("Hello from server!"), NETCONN_COPY);
                        }
                        // 关闭连接
                        netconn_close(newconn);
                        netconn_delete(newconn);
                    }
                }
            }
        }
        // 关闭连接
        netconn_close(conn);
        netconn_delete(conn);
    }
}

static void client_thread(void *arg)
{
    struct netconn *conn;
    err_t err;
    char buffer[1024];

    // 创建一个新的连接
    conn = netconn_new(NETCONN_TCP);
    if (conn != NULL) {
        // 连接到服务端
        err = netconn_connect(conn, IP_ADDR_ANY, SERVER_PORT);
        if (err == ERR_OK) {
            // 发送数据到服务端
            err = netconn_write(conn, "Hello from client!", sizeof("Hello from client!"), NETCONN_COPY);
            if (err == ERR_OK) {
                // 读取服务端发送的响应数据
                err = netconn_recv(conn, &buffer, sizeof(buffer), NETCONN_COPY);
                if (err == ERR_OK) {
                    // 处理响应数据
                    printf("Received data: %s\n", buffer);
                }
            }
        }
        // 关闭连接
        netconn_close(conn);
        netconn_delete(conn);
    }
}

int main()
{
    sys_thread_new("server", server_thread, NULL, 1024, 0);
    sys_thread_new("client", client_thread, NULL, 1024, 0);

    while (1) {
        // do nothing
    }

    return 0;
}

在这个示例中,我们创建了两个线程,一个用于运行服务端代码,另一个用于运行客户端代码。服务端代码创建了一个新的连接,绑定到指定端口,并监听连接请求。当有新的连接请求时,它会接受连接,读取客户端发送的数据,处理数据,并发送响应数据,然后关闭连接。客户端代码创建了一个新的连接,连接到服务端,并发送数据到服务端。然后它会读取服务端发送的响应数据,并处理数据,然后关闭连接。这个示例使用了lwIP的NETCONN API来实现服务端和客户端的功能

lwip NETCONN 同时创建服务端和客户端代码

原文地址: https://www.cveoy.top/t/topic/dbGL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录