0

我开发了以下 C 代码来屏蔽数据,然后再发送回 Web 服务器客户端,这是使用 RFC 6455 协议在 Firefox 浏览器上运行的 java 脚本。但是我面临问题,因为我无法在客户端看到任何东西。有人说从服务器发送到客户端时不需要屏蔽数据。真的吗 ?我看不出这在我的情况下有效。如果我的问题在某处模棱两可,请告诉我。谢谢你的帮助。

char frame[131],message[360];
strcpy(message,"Server here !");                
frame[0] = '\x81';
frame[1] = 128 + strlen(message);
frame[2] = '\x00';
frame[3] = '\x00';
frame[4] = '\x00';
frame[5] = '\x00';
snprintf(frame+6, 124, "%s", message);
printf("%s", frame);
n = write(newsockfd, frame, strlen(frame));
4

3 回答 3

1

不要使用该strlen函数来获取 C 样式字符串以外的任何内容的长度。您的框架不是 C 风格的字符串。框架的长度是6 + strlen(message),不是strlen(frame)

这也是为什么printf("%s", frame);没有工作。格式说明符用于 C 样式的%s字符串,而您的框架不是。

这假设您的消息是 C 风格的字符串。如果没有,您还有其他错误,因为您使用strlen在初始化程序中计算它的长度frame[1]

于 2012-06-29T06:05:16.097 回答
1

由于嵌入的空值,strlen() 没有给出帧的长度。将消息长度添加到帧前缀长度。但是掩蔽在哪里?

于 2012-06-29T06:06:46.767 回答
0

我想知道你为什么要屏蔽发送给客户端的帧?

RFC 6455说明如下:

服务器不得屏蔽它发送给客户端的任何帧。如果客户端检测到屏蔽帧,它必须关闭连接。

查看第 5.1 节了解更多详细信息。

于 2013-04-15T10:03:15.623 回答