从网络套接字服务器发送屏蔽的数据到网络套接字客户端

问题描述:

我已经开发了下面的C代码,在发送回web服务器客户端之前屏蔽数据,这是在Firefox浏览器上使用RFC 6455协议运行的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)); 
+1

这不会做任何RFC 6455掩码,我可以看到。异或在哪里? – EJP

+0

我第一次尝试发送未屏蔽的数据,看看它是否能像RFC中那样工作,即可以在没有任何屏蔽的情况下发送来自服务器的数据。如果你能指出我该如何掩盖以及如何决定屏蔽位,会很高兴。 –

+0

您的问题标题为“发送屏蔽数据”。你的问题甚至没有尝试。错误的问题不会帮助任何人。 – EJP

不要使用strlen函数来获取的任何东西,但C风格字符串的长度。你的框架不是C风格的字符串。该帧的长度是6 + strlen(message),而不是strlen(frame)

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

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

+0

非常感谢。 Got you! 我一直用strlen(框架)错误,我用6 + strlen(消息)替换它,它的工作原理和我想要的一样(非屏蔽数据) 你能帮我怎么发送屏蔽数据给客户端哪个客户端能够解码(RFC 6455)? –

+0

只要按照规范。如果遇到麻烦,请提出具体问题。 (或者看看其他人的实现。) –

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

+0

谢谢。 你能帮我掩饰根据RFC 6455?我首先尝试发送未被屏蔽的数据,看看它是否工作。 –

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

RFC 6455说以下内容:

服务器不能掩盖任何帧,并将其发送到 客户端。如果客户端检测到一个被屏蔽的 帧,它必须关闭连接。

查看第5.1节了解更多详情。