gpt4 book ai didi

c - 无法向 libwebsocket 服务器发送数据

转载 作者:行者123 更新时间:2023-12-04 09:58:21 27 4
gpt4 key购买 nike

我正在尝试为 X-Plane 编写一个小插件,使用 libwebsocket 创建一个简单的 websocket 服务器。我可以从 Google Chrome 连接到 websocket,但是,当我向服务器发送数据时,X-Plane 立即崩溃。

我很确定following code导致问题的原因:

unsigned char *buf = (unsigned char*) malloc(LWS_SEND_BUFFER_PRE_PADDING + 13 + LWS_SEND_BUFFER_POST_PADDING);
buf = (unsigned char*) "Hello World!";
libwebsocket_write(wsi, buf, len, LWS_WRITE_TEXT);
free(buf);

我根本不是C程序员/专家,但是上面的内容似乎有问题吗?

我已将完整源代码发布在 Gist 上:https://gist.github.com/josefvanniekerk/868432986f2f963a5583

最佳答案

对于任何理智的界面,@iharob 都是正确的 - 明确他/她 关于您对字符串分配的误解是正确的。

但是,libwebsockets 有点“特殊”。您需要将字符串复制到 malloc() 的数组 LWS_SEND_BUFFER_PRE_PADDING 字节中。libwebsockets 然后覆盖前面的字节。

所以你想要类似的东西(假设你不尝试发送字符串上的终止零):

char *text = "Hello World!";
int len = strlen (text);
unsigned char *buf = malloc(LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING);
/* copy string but not terminating NUL */
memcpy (buf + LWS_SEND_BUFFER_PRE_PADDING, text, len );
libwebsocket_write(wsi, buf + LWS_SEND_BUFFER_PRE_PADDING, len, LWS_WRITE_TEXT);
free(buf);

如果您还想发送NUL:

char *text = "Hello World!";
int len = strlen (text) + 1;
unsigned char *buf = malloc(LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING);
/* copy string including terminating NUL */
memcpy (buf + LWS_SEND_BUFFER_PRE_PADDING, text, len );
libwebsocket_write(wsi, buf + LWS_SEND_BUFFER_PRE_PADDING, len, LWS_WRITE_TEXT);
free(buf);

关于c - 无法向 libwebsocket 服务器发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28309648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com