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

从C套接字上的传入流中提取数据(字符串、字符等),c,sockets,tcp,udp,esp8266,C,Sockets,Tcp,Udp,Esp8266,如何从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, &

如何从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”字符串。如何在“服务器”端解释这个字符串

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


另外,我意识到这可能是一个非常原始的机制,所以我希望能得到一些关于这个问题的反馈。非常感谢您的任何想法/想法/建议。

由于您的服务器无法知道数据发送的内容和方式,如果您选择使用字符串,您需要指定一条公共消息或单词之间的某种分隔符

例如,您可以使用
|
作为分隔符,以便在客户机上输入以下内容:
测试| 123

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

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

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

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

结果是一个简单的练习。
netbuf
结构为传入数据的内容及其长度设置了“占位符”

netbuf_数据(nb、data和len)

就我而言

/* INTERPRETE INCOMING DATA HERE?? */

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

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

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

“如何在‘服务器’端解释此字符串?”这取决于客户端和服务器同意“说话”的“语言”。我们不知道这种“语言”。
testing123
例如可以被视为
test
ing123
,或者被视为
testing
123
,或者。。。我通过python接口通过发送编码字符串与它通信,如:“msg=”testing123“s.send(msg.encode())”,我认为这无关紧要,字符串对我来说就是字符串,显然我对它知之甚少