网站毕设,给个网址兄弟,网络优化策划书,东营港网上找了很多代码都是旧版协议的#xff0c;研究了很久终于弄清楚了 现在发个用新版协议写的服务端代码出来(这个代码是从网上旧版协议改过来的)最要就是握手协议和发送接受字符的方式变了# incodingutf-8import socketimport structimport hashlibimport threading,randomimp…网上找了很多代码都是旧版协议的研究了很久终于弄清楚了 现在发个用新版协议写的服务端代码出来(这个代码是从网上旧版协议改过来的)最要就是握手协议和发送接受字符的方式变了# incodingutf-8import socketimport structimport hashlibimport threading,randomimport sysreload(sys)sys.setdefaultencoding(utf-8)connectionlist {}def sendMessage(message):global connectionlistfor connection in connectionlist.values():print connectionbstr send_data(message)print bstrb connection.send(bstr)def deleteconnection(item):global connectionlistdel connectionlist[connectionitem]#接收客户端发送过来的消息,并且解包def RecvData(nNum,client):try:pData client.recv(nNum)if not len(pData):return Falseexcept:return Falseelse:code_length ord(pData[1]) 127if code_length 126:masks pData[4:8]data pData[8:]elif code_length 127:masks pData[10:14]data pData[14:]else:masks pData[2:6]data pData[6:]raw_str i 0for d in data:raw_str chr(ord(d) ^ ord(masks[i%4]))i 1return raw_str#打包发送数据给客户端def SendData(pData,client):if(pData False):return Falseelse:pData str(pData)token \x81length len(pData)if length 126:token struct.pack(B, length)elif length 0xFFFF:token struct.pack(!BH, 126, length)else:token struct.pack(!BQ, 127, length)pData %s%s % (token,pData)client.send(pData)return Truedef 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_strreturn back_strclass WebSocket(threading.Thread):def __init__(self,conn,index,name,remote, path/):threading.Thread.__init__(self)self.conn connself.index indexself.name nameself.remote remoteself.path pathself.buffer def run(self):print Socket%s Start! % self.indexheaders {}self.handshaken Falsewhile True:if self.handshaken False:print Socket%s Start Handshaken with %s! % (self.index,self.remote)self.buffer self.conn.recv(1024)if self.buffer.find(\r\n\r\n) ! -1:header, data self.buffer.split(\r\n\r\n, 1)for line in header.split(\r\n)[1:]:key, value line.split(: , 1)headers[key] valueprint header:--headerheaders[Location] ws://%s%s %(headers[Host], self.path)self.buffer data[8:]key headers[Sec-WebSocket-Key]token self.generate_token(key)handshake \HTTP/1.1 101 Web Socket Protocol Handshake\r\n\Upgrade: webSocket\r\n\Connection: Upgrade\r\n\Sec-WebSocket-Accept:%s\r\n\Sec-WebSocket-Origin: %s\r\n\Sec-WebSocket-Location: %s\r\n\r\n\ %(token,headers[Origin], headers[Location])print handshakenum self.conn.send(handshake)print str(num)self.handshaken Trueprint Socket%s Handshaken with %s success! % (self.index,self.remote)#self.conn.send(\x00Welcome\xFF\n)bstr send_data(Welcome)print bstrself.conn.send(bstr)#SendData(\x00Welcome\xFF,self.conn)#sendMessage(Welcome, self.name !)else:self.buffer RecvData(8196,self.conn)if self.buffer:print rec:self.bufferif self.buffer:#s self.buffer.split(\xFF)[0][1:]s self.bufferif squit:print Socket%s Logout! % (self.index)sendMessage(self.name Logout)deleteconnection(str(self.index))self.conn.close()breakelse:print Socket%s Got msg:%s from %s! % (self.index,s,self.remote)sendMessage(self.name:s)self.buffer def generate_token(self, key):import base64nkeykey258EAFA5-E914-47DA-95CA-C5AB0DC85B11nkeybase64.b64encode(hashlib.sha1(nkey).digest())return nkeyclass WebSocketServer(object):def __init__(self):self.socket Nonedef begin(self):print WebSocketServer Start!self.socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.socket.bind((192.168.1.210,1234))self.socket.listen(50)global connectionlisti0while True:connection, address self.socket.accept()usernameaddress[0]newSocket WebSocket(connection,i,username,address)newSocket.start()connectionlist[connectionstr(i)]connectioni i 1if __name__ __main__:server WebSocketServer()server.begin()