从 C 套接字上的传入流中提取数据(字符串、字符等)

Extract data (string, char, etc.) from an incoming stream on a C socket

如何从 C 套接字上的传入流中提取实际数据(以人类可读的字符串、字符、整数等形式)?这样做的目的是能够对传入消息的内容进行操作。

struct netconn *client = NULL;
struct netconn *nc = netconn_new(NETCONN_TCP);
netconn_bind(nc, IP_ADDR_ANY, 8569);
netconn_listen(nc);

while (1) {
    err_t err = netconn_accept(nc, &client);
    if (err == ERR_OK) {
        struct netbuf *nb;
        if ((err = netconn_recv(client, &nb)) == ERR_OK) {

            /* INTERPRETE INCOMING DATA HERE?? */

        }
        netbuf_delete(nb);
    }
    netconn_close(client);
    netconn_delete(client);
}

客户端连接并发送,说'testing123'字符串。我该如何在 'server' 端解释这个字符串?

本练习的重点是能够通过使用适当的 'command' 通过本地网络发送到 WLAN 连接的 ESP8266 微控制器,从而在接收端触发所需的行为。

Ps。我意识到这可能是非常原始的机制,所以我希望得到有关此事的反馈。任何 thoughts/ideas/suggestions 非常感谢。

由于您的服务器不知道发送什么数据以及如何发送数据,如果您选择使用字符串,则需要指定一条通用消息或某种单词之间的分隔符。

例如,您可以使用 | 作为分隔符,这样您就可以在客户端输入以下内容:testing|123

在您的服务器上,您现在需要搜索 | 分隔符并划分传入数据,这样您就有一个字符串 "testing" 和一个整数“123”。

作为另一种方法,您可以借助结构为自己定义一个基于数字的接口。 例如:

typedef struct
{
    int cmd;
    int subCmd;
} cmdStruct;

在这种情况下,您需要反序列化传入的字节并将它们解析为命令结构并根据接收到的命令执行操作。这包括您相应地发送命令。

结果证明是微不足道的练习。 netbuf 结构有 'placeholders' 用于输入数据的内容及其长度;

netbuf_data(nb, &data, &len);

就我而言;

/* INTERPRETE INCOMING DATA HERE?? */

void *data;
u16_t len;
netbuf_data(nb, &data, &len);

char * theData = data;
printf("%s\n", theData);

在屏幕上打印传入的字符串。