我正在通过python创建websocket服务器(我对python有点新鲜),并且我已经取得了重大进展,但我无法将数据发送到Web浏览器。我可以建立连接并从浏览器接收数据,但我无法发回数据。浏览器只是忽略它。我假设如果浏览器收到一个不符合规范的包,它会终止连接,但连接保持活动状态。Websocket:浏览器dos似乎没有从python服务器接收数据
这里是我使用的数据编码为帧中的方法:
def encode_message(data):
frame = "\x81"
size = len(data)
if size * 8 <= 125:
frame += chr(size)
else:
raise Exception("Uh, oh. Strings larger than 125 bits are not supported")
return frame + data
我使用sock.sendall(framed_data)
发送数据。可能是什么问题呢?像“yo”这样的消息的数据最终为10000001 00000010 01111001 01101111
(为提高可读性而添加的空间)。为什么浏览器不接受这样的消息?它是否不遵循the specification中列出的指导原则?我正在尝试支持最新的websocket版本,我认为它是版本13.我正在使用python版本2.7.3。
我试图看看python websocket库的源代码,但它们都似乎实现了已被证明具有漏洞的websocket协议的已弃用版本。
下面是调用上面的函数的代码:
def send(data):
frame = encode_message(data)
print "Sending all..."
sock.sendall(frame) #Socket that handles all communications with client
print "Frame sent :)"
return
我也下载了Wireshark的嗅探服务器和插座之间发送的包。我的服务器发送的包与从浏览器接受的服务器发送的包相同。我根本看不出有什么不同。 (我直接看着十六进制源)
所以没有人知道如何解决这个问题? – CoderOfHonor 2013-05-12 02:07:48
什么回调在您的浏览器中运行? 'onopen'在握手结束时运行吗? 'onerror'或'onclose'稍后运行?你是否记得在完成握手后保持连接打开?如果这些问题都不能帮助您找到答案,您是否可以发布完整的服务器源代码以及一些可以证明问题的简单客户端代码? – simonc 2013-05-13 08:33:28
'onopen'在我的握手结束时运行。在服务器断开websocket之前'onclose'不运行。 'onerror'永远不会被调用,因为不会抛出任何错误。握手完成后,服务器可以接收来自客户端的消息,但反向不起作用。 – CoderOfHonor 2013-05-13 21:09:46