Chrome表示“;无法将文本帧解码为UTF-8“;当从libwebsockets接收时
Chrome says "Could not decode a text frame as UTF-8" when receiving from libwebsockets
我使用的是libwebsockets C库。我正在尝试做一个简单的echo服务器,作为一个测试。我正在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);
};
C
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;
}
}
我确实收到了来自浏览器的"这是你好",但当我发送答案时,它确实写着"写入534字节",但在Javascript方面,网络套接字连接关闭,Chrome说:"无法将文本帧解码为UTF-8"。
我很困惑,在字符串"Answer"中,只有<128个字符,所以它们应该是UTF-8,对吧?
我很困惑,在字符串"Answer"中,只有<128个字符,所以它们应该是UTF-8,对吧?
你确定吗?
您正在返回p
;即buf
,其大小为LWS_SEND_BUFFER_PRE_PADDING + 512 + LWS_SEND_BUFFER_POST_PADDING
,但您仅设置"Answer"的6个字符加上'0
。
我的猜测是buf
的其余部分包含随机字节,很可能没有UTF-8字符。
在填充缓冲区并使用strncpy
之前,您应该使用0
来memset
缓冲区。
相关文章:
- "资源不足错误“;当从Chrome控制台重复发出ajax请求时
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- 当从jquery的点击事件中的每个循环创建的数组到它之外时,它显示空白数组
- 仅当从列表中选择了一个特定选项时,才显示相关内容
- "未定义的“;当从Android向JavaScript传递数据时
- 当从jqueryajax调用输入表单时,它不起作用
- "JSON_PARSING_ERROR:位置0处的意外字符(d);当从GAS发送GCM请求时
- 不打印“;id”;当从JavaScript以HTML调用时
- 当从Java转换时,gwt可以生成.js而不是.html文件
- 自定义Div滑块运行过快,但仅当从另一个浏览器选项卡返回时
- 当从servlet返回到JSP时,Javascript的变化非常明显
- 当从代码后台输出Javascript时,如何处理换行符
- 仅当从另一个 URL 加载数据时,才会触发另一个插件
- 当从 for 循环填充变量时如何使用 promise
- 从 utf-8 代码打印/输出 utf-8 字符
- 当从第一个选项中选择一个选项时,如何取消隐藏另一个选择字段
- 如果 else 语句在 javascript onclick() 中不起作用,当从 android webview 调用
- 当从一个页面快速导航到另一个脚本警报时,显示原因
- 当从指令中删除元素时,AngularJs 是否会自动销毁范围
- Chrome表示“;无法将文本帧解码为UTF-8“;当从libwebsockets接收时