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にする必要がありますよね?