将屏蔽数据从Web套接字服务器发送到Web套接字客户端

时间:2012-06-29 06:00:56

标签: c sockets encoding web

我开发了以下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));

3 个答案:

答案 0 :(得分:1)

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

这也是printf("%s", frame);无效的原因。 %s格式说明符用于C样式字符串,而您的帧不是。

这假设您的消息是C风格的字符串。如果没有,那么您有其他错误,因为您使用strlenframe[1]的初始值设定项中计算其长度。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

RFC 6455说明如下:

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

检查5.1节以获取更多详细信息。