下面的是server端:把IP改成自己的局域网IP:
#coding:utf8import socket,selectimport SocketServerimport hashlib,base64,timefrom pprint import pprint#author:lijimdef f(key): s=key+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11" sha1=hashlib.sha1(s) dig=sha1.digest() return base64.encodestring(dig).strip()def parse_data(msg): code_length = ord(msg[1]) & 127 if code_length == 126: masks = msg[4:8] data = msg[8:] elif code_length == 127: masks = msg[10:14] data = msg[14:] else: masks = msg[2:6] data = msg[6:] i = 0 raw_str = '' for d in data: raw_str += chr(ord(d) ^ ord(masks[i%4])) i += 1 return raw_strdef send_data(raw_str): back_str = [] back_str.append('\x81') data_length = len(raw_str) if data_length < 125: back_str.append(chr(data_length)) else: back_str.append(chr(126)) back_str.append(chr(data_length >> 8)) back_str.append(chr(data_length & 0xFF)) back_str = "".join(back_str) + raw_str return back_strgmsg=Nonedef m(cs,raddr): print raddr req= cs.recv(8*1024) print 'request:\n',req print '-'*20+'\n' tmplist=req.split("\r\n") headers={} get=tmplist.pop(0) for i in tmplist: if i.find(":") !=-1: item=i.split(":") headers[item[0]]=item[1].strip() # pprint(headers) key=headers.get("Sec-WebSocket-Key","") print '-'*20 print 'key:',key accept=f(key) print '-'*20+'\n' ends=websocktemplate%(accept,headers.get("Sec-WebSocket-Origin","NULL").strip(),headers.get("Host","").strip(),) print 'response:\n' print ends cs.send(ends) print '-'*20 global gmsg while 1: try: r,w,e=select.select([cs,],[],[],0.5) if gmsg: cs.send(send_data(str(raddr)+':'+gmsg)) gmsg=None if cs in r: msg=cs.recv(8*1024) if msg: data=parse_data(msg) if data!='close': gmsg=data print '%s:%s'%(raddr,data) cs.send(send_data(str(raddr)+':'+data)) else: break except: cs.close() ## cs.shutdown(2)## cs.close()## except KeyboardInterrupt:### sock.shutdown(1)## sock.close()## print 'stop.'## break sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)address=("192.168.1.104",8888)sock.bind(address)sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)sock.listen(20)websocktemplate=''.join(["HTTP/1.1 101 Switching Protocols\r\n","content-type:charset=utf-8\r\n","Upgrade:websocket\r\n","Connection: Upgrade\r\n","Sec-WebSocket-Accept:%s\r\n","WebSocket-Origin:%s\r\n","WebSocket-Location: ws://%s/WebManagerSocket\r\n","WebSocket-Protocol:WebManagerSocket\r\n\r\n"])import threadingwhile 1: r,w,e=select.select([sock,],[],[],1) print 'wait..' if sock in r: cs,raddr=sock.accept() t=threading.Thread(target=m,args=(cs,raddr)) t.setDaemon(1) t.start()
下面为html页面:
WebSocket WebSocket