我只是想用WebSockets。我用python编写服务器代码。服务器运行良好,但当尝试使用浏览器连接到套接字时,我得到了错误"WebSocket connection to 'ws://localhost:9876/' failed: Received
unexpected continuation frame"
当我在互联网上提到时,我明白这是与从服务器发送的数据帧有关的事情。在发送数据时,我尝试遵循these(rfc6455)标准,即使我无法实现websocket连接。几乎类似的问题被问到here,但这是一个老帖子,也不清楚解决办法。在
我的服务器很简单。。在import socket
def handle(s):
print repr(s.recv(4096))
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
s.bind(('',9876))
s.listen(2)
handshakes='\
HTTP/1.1 101 Web Socket Protocol Handshake\r\n\
Upgrade: WebSocket\r\n\
Connection: Upgrade\r\n\
Sec-WebSocket-Origin: null\r\n\
Sec-WebSocket-Location: ws://localhost:9876/\r\n\
'
def handshake(hs):
hslist = hs.split('\r\n')
body = hs.split('\r\n\r\n')[1]
key = ''
cc = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
for h in hslist:
if h.startswith('Sec-WebSocket-Key:'):
key = h[19:]
else:
continue
import hashlib
import base64
s = hashlib.sha1()
s.update(key+cc)()
h = s.digest()
return base64.b64encode(h)
def sender(data, conn):
first_byte = chr(0x00)
payload = data.encode('utf-8')
pl = first_byte + payload + chr(0xFF)
conn.send(pl)
while True:
c,a = s.accept()
msg = c.recv(4096)
if(msg):
print msg
print 'sending handshake ...'
handshakes += 'Sec-WebSocket-Accept: '+str(handshake(msg))+'\r\n\r\n'
print handshakes
c.send(handshakes)
sender("Hello", c)
break;
以及html,索引.html在
^{pr2}$
我是这样运行代码的。。在./server.py & python -m SimpleHTTPServer 8888
在运行服务器之后,当我点击localhost:8888使用浏览器,它会在控制台上警告“打开”(表示握手完成)的同时,警告“关闭”(连接关闭),并在控制台上显示上述错误。在
不太清楚如何调试这个问题。在
我使用浏览器Chrome(版本:41)、python2.7、websocket13。在