1

libwebsockets C ライブラリを使用しています。テストとして、単純なエコーサーバーを実行しようとしています。LinuxでFirefoxとChromeをテストしています。

コードの部分は単純です:

Javascript

var ws = new WebSocket ("ws://127.0.0.1:9999", "hephaestus");

ws.onopen = function() {
    console.log ('Connection opened.');
    setTimeout (function() {
        ws.send ('This is a hello.\n');
    }, 2000);
};

ws.onerror = function() {
    console.log ('Error in connection');
};

ws.onclose = function() {
    console.log ('Connection closed');
};

ws.onmessage = function (msg) {
    console.log ('Message received : ' + msg.data);
};

ephaestus_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];
    unsigned char *ret = "Answer";

    switch (reason)
    {
        case LWS_CALLBACK_RECEIVE:
        printf("Received : %s\n",in);
        strcpy (p, ret);
        n = libwebsocket_write (wsi, buf, LWS_SEND_BUFFER_POST_PADDING + 512 + LWS_SEND_BUFFER_PRE_PADDING, LWS_WRITE_TEXT);
        printf ("Wrote %d bytes.\n", n);
        break;
    }

}

ブラウザから「This is a hello」を受け取りますが、回答を送信すると「Wrote 534 bytes」と書き込まれますが、Javascript 側では Web ソケット接続が閉じられ、Chrome は次のように言います:「デコードできませんでした」 UTF-8 としてのテキスト フレーム"。

文字列「Answer」には128文字未満しかないので、UTF-8にする必要がありますよね?

4

1 に答える 1

2

文字列「Answer」には128文字未満しかないので、UTF-8にする必要がありますよね?

本気ですか ?

あなたは戻ってきていpます。つまりbuf、どのサイズですLWS_SEND_BUFFER_PRE_PADDING + 512 + LWS_SEND_BUFFER_POST_PADDINGが、「回答」の6文字と\0.

私の推測では、残りの部分にbufはランダムなバイトが含まれており、おそらく UTF-8 文字は含まれていません。

バッファを埋めて使用する前にmemset、バッファを使用する必要があります。0strncpy

于 2014-08-29T14:01:26.323 に答える