libwebsockets で構築された小さな websocket サーバーがあり、 string を受け取る必要があります。問題は、受け取ったデータが *void であることですが、 string にキャストするのに問題があります。
static int my_protocol_callback(struct libwebsocket_context *context,
struct libwebsocket *wsi,
enum libwebsocket_callback_reasons reason,
void *user, void *in, size_t len)
{
int n, m;
unsigned char buf[LWS_SEND_BUFFER_PRE_PADDING + 512 +
LWS_SEND_BUFFER_POST_PADDING];
unsigned char *p = &buf[LWS_SEND_BUFFER_PRE_PADDING];
switch (reason) {
case LWS_CALLBACK_ESTABLISHED:
printf("New Connection\n");
break;
case LWS_CALLBACK_SERVER_WRITEABLE:
break;
case LWS_CALLBACK_RECEIVE:
webcmd = static_cast<std::string*>(in);
break;
case LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION:
break;
default:
break;
}
return 0;
}
このLWS CALLBACK RECEIVE
場合、データは*in
であり、私はそれを でキャスト static_cast<std::string*>(in);
し、webcmd 文字列に格納しました。
問題は、結果が char ポインターであることです。代わりに、次に文字列を分割する必要があるため、真の char が必要です。
あなたはそれについてどう思いますか?
EDIT:問題を解決しました。
下case LWS_CALLBACK_RECEIVE:
tmpcmd = reinterpret_cast <char*>(in);
strcpy(webcmd , tmpcmd );
webcmd は char 配列で、tmpcmd は char ポインターです。
いつもありがとうございます:D