- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试握手,但我不断收到错误:失败:WebSocket 握手期间出错:“Sec-WebSocket-Accept” header 值不正确
我做错了什么?
服务器:
import socket
import re
from base64 import b64encode
from hashlib import sha1
GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
websocket_answer = (
'HTTP/1.1 101 Switching Protocols',
'Upgrade: websocket',
'Connection: Upgrade',
'Sec-WebSocket-Accept: {key}\r\n\r\n',
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host='10.10.10.12'
port=8999
s.bind((host,port))
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
client_list = []
while True:
data = conn.recv(1024)
if not data:
break
if(s not in client_list):
client_list.append(s)
key = (re.search('Sec-WebSocket-Key:\s+(.*?)[\n\r]+', data.decode('utf-8'))
.groups()[0]
.strip())
print('key' + key)
response_key = b64encode(sha1((key + GUID).encode('utf-8')).hexdigest().encode('utf-8')).decode('utf-8')
response = '\r\n'.join(websocket_answer).format(key=response_key)
print('_________________RESPONSE________________')
print(response.encode('ascii'))
conn.send(response.encode('utf-8'))
else:
print(str(data))
print(data.decode('utf-8'))
客户:
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
var s = new WebSocket('ws://10.10.10.12:8999');
s.onmessage = function(t){console.log(t)};
s.onopen = function(){
s.send('hello from client');
}
</script>
</head>
<body>
</body>
</html>
最佳答案
这对我有用:
import socket
import re
from base64 import b64encode
from hashlib import sha1
GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
websocket_answer = (
'HTTP/1.1 101 Switching Protocols',
'Upgrade: websocket',
'Connection: Upgrade',
'Sec-WebSocket-Accept: {key}\r\n\r\n',
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host='10.10.10.12'
port=8999
s.bind((host,port))
s.listen(1)
conn, addr = s.accept()
#print('Connected by', addr)
client_list = []
while True:
data = conn.recv(1024)
if not data:
break
if(s not in client_list):
client_list.append(s)
key = (re.search('Sec-WebSocket-Key:\s+(.*?)[\n\r]+', data.decode('utf-8'))
.groups()[0]
.strip())
#print('key' + key)
sha1f = sha1()
sha1f.update(key.encode('utf-8') + GUID.encode('utf-8'))
response_key = b64encode(sha1f.digest()).decode('utf-8')
response = '\r\n'.join(websocket_answer).format(key=response_key)
#print('_________________RESPONSE________________')
#print(response)
conn.send(response.encode('utf-8'))
else:
pass
#print(data.decode('utf-8'))
print(str(data).encode('utf-8').decode('utf-8'))
关于python web 套接字握手不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35733989/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!