从C套接字上的传入流中提取数据(字符串、字符等)
如何从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, &
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())”,我认为这无关紧要,字符串对我来说就是字符串,显然我对它知之甚少