Libwesockets:如何从websocket正确读取文本json数据?

问题描述

我有这样的websocket实现,以前可以使用,但是现在不行,因为我升级了库版本。

    int Handle(struct lws *wsi,enum lws_callback_reasons reason,void *user,void *in,size_t len) {
        switch( reason ) {
            case LWS_CALLBACK_CLOSED: {
                lwsl_notice("Client Disconnected\n");
                break;
            }
            case LWS_CALLBACK_ESTABLISHED: {
                lwsl_notice("Client Connected\n");
                break;
            }
            case LWS_CALLBACK_RECEIVE: {
                lwsl_notice("Message: %s\n",in);
                break;
            }
            default:
                break;
        }

        return 0;
    }

    static struct lws_protocols protocols[] =
    {
        {
            "server",Handle,sizeof(struct Session),LWS_MESSAGE_CHUNK_SIZE,},{ NULL,NULL,0 }
    };

    int Start() {
        struct lws_context_creation_info info;
        memset( &info,sizeof(info) );

        info.port = 3018;
        info.protocols = protocols;
        info.gid = -1;
        info.uid = -1;

        struct lws_context *context = lws_create_context( &info );

        while( 1 ) {
            lws_service( context,1000000 );
        }

        lws_context_destroy( context );
    }

问题在于数据的末尾带有一些噪声。

如果我从一端{}发送,则在另一端{}/S4T1u3F2O1AA82K7Kg=接收。因此,*in在实际消息字符串之后包含此噪声。 如何正确接收数据?

我尝试了不同的示例,但它们看起来过于复杂。

解决方法

我设法将正确数量的数据复制到字符串中。 我的解决方案:

    char data[len]; 
    memcpy(data,in,len);
    data[len] = '\0';

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...