저는 C 라이브러리 libwebsockets을 사용하고 있습니다. 나는 간단한 에코 서버를 테스트하려고하고있다. 나는 리눅스에서 파이어 폭스와 크롬으로 테스트하고있다. 코드의libwebsockets에서 수신 할 때 Chrome에서 "텍스트 프레임을 UTF-8로 디코딩 할 수 없습니다"라고 말합니다.
조각은 간단하다 :
자바 스크립트
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 바이트를 썼다. 그러나 hte 자바 측에서 웹 소켓은 연결된다. 이온이 닫히고 Chrome에서 "텍스트 프레임을 UTF-8로 디코딩 할 수 없습니다"라고 표시됩니다.
"Answer"문자열에 < 128 문자 만 있으므로 혼동 스럽습니다. 그렇다면 UTF-8이어야합니다. 맞습니까?
'unsigned char ret [] = "대답"; "더 좋을 것입니다. – Coconop