更新时间:2020-03-03 16:53
WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输。但它跟 HTTP 没什么关系,它是基于 TCP 的一种独立实现。
#启动Socket并监听连接
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
参数名称 | 参数类型 | 参数说明 |
---|---|---|
暂无
暂无
暂无
def Create_Socket():
#启动Socket并监听连接
sock=socket.socket(socket.AF_INFT,socket.SOCK_STREAM)
try:
sock.bind('127.0.0.1',8001)
#操作系统会在服务器Socket 被关闭或服务器进程终止后马上释放该服务器端口
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.listen(5)
except Exception as e:
logging.error(e)
return
else:
loging.info('Server running...')
#等待访问
while True:
conn , addr = sock.accept() #进入waiting 状态
data=str(conn.recv(1024))
logging.debug(data)
header_dict={}
header, _ =data.split(r'\r\n\r\n',1)
for line in header.split(r'\r\n')[1:]:
key , val = line.split(':',1)
header_dict[key]=val
if 'Sec-WebSocket-Key' not in header_dict:
logging.error('This socket is not websocket,client close.')
conn.close()
return
magic_ket=''
sec_key=header_dict['Sec-WebSocket-Key']+magic_ket
key=base64.b64encode(hashlib.shal(bytes(sec_key,encodeing='utf-8')).digest())
logging.debug(key_str)
response=''
conn.send(bytes(response,encoding='utf-8'))
WebSocketThread(conn).start()
pass
def read_msg(data):
mes_len=data[1]&127 # 数据载荷长度
if msg_len==126:
mask =data[4:8] #mask掩码
content =data[8:] #消息内容
elif msg_len==127:
mask =data[10:14]
content =data[14:]
else:
mask=data[2:6]
content=data[6:]
raw_str= '' #解码后的内容
for i,d in enumerate(content):
raw_str+=chr(d ^ mask[i%4])
return raw_str
pass
def write_msg(message):
data = struct.pack('B',129)
# 写入包长度
msg_len=len(message)
if msg_len<=125:
data+=stryct.pack('B',msg_len)
elif msg_len <= (2 ** 16-1):
data += struct.pack('!BH',126,meg_len)
elif msg_len <= (2 ** 64-1):
data += struct.pack('!BQ',126,meg_len)
else:
return
data += bytes(message,encoding='utf-8')
return data
pass
在文档使用中是否遇到以下问题
更多建议
匿名提交