Python socket server causing Error 1006 client-side -


i building small socket server in python, , web-based client using websocket javascript api, , connection keeps closing after send first message. tryed connecting //echo.websocket.org , sending message , there's no problem there. i've read error meant low-level implementation error, i'm assuming comes server, may doing handshake wrong. here client code:

function init_game(){      socket = new websocket('ws://localhost:3003');     //socket = new websocket('ws://echo.websocket.org');     setupsocket(); }   function setupsocket(){      socket.onopen = function(){         console.log('connection open !');          var msg = {cmd: 'hello', params: {}};         var data = json.stringify(msg);         console.log('sending : ' + data);         socket.send(data);     };      socket.onmessage = function(e){          var data = e.data;         console.log('received : ' + data);         handle(data);     };      socket.onerror = function(e){         console.log('error : ' + e.code + " - " + e.reason);     };      socket.onclose = function(e){         console.log('connection closed : ' + e.code + " - " + e.reason);     } }  function handle(data){     //doing stuff }  window.onload = init_game; 

and here server code:

class clientthread(threading.thread):      # constructor     def __init__(self, conn, id, q):          threading.thread.__init__(self)          self.conn_ = conn         self.id_ = id         self.name_ = ''         self.q_ = q         self.handshaken_ = true         self.encoded_ = false       # main loop     def run(self):          raw_data = self.conn_.recv(1024)          if raw_data[:3] == 'get':             self.handshaken_ = false             self.handshake(raw_data)          while true:              raw_data = self.conn_.recv(1024)              if len(raw_data) == 0:                 continue              if self.handshaken_:                                  if self.encoded_:                     raw_data = self.decode(raw_data).decode('utf-8')                  try:                      data = json.loads(raw_data)                     cmd = data['cmd']                     params = data['params']                      self.handle(cmd, params)                  except valueerror, e:                     print 'data received not json'              else:                 print 'received handshake not done yet... going wrong.'       # decode encoded message received frmo client     def decode(self, data):          frame = bytearray(data)          length = frame[1] & 127          indexfirstmask = 2         if length == 126:             indexfirstmask = 4         elif length == 127:             indexfirstmask = 10          indexfirstdatabyte = indexfirstmask + 4         mask = frame[indexfirstmask:indexfirstdatabyte]          = indexfirstdatabyte         j = 0         decoded = []         while < len(frame):             decoded.append(frame[i] ^ mask[j%4])             += 1             j += 1          return "".join(chr(byte) byte in decoded)       # performs handshake protocole in case it's needed     def handshake(self, get):          websocket_answer = (             'http/1.1 101 switching protocols',             'upgrade: websocket',             'connection: upgrade',             'sec-websocket-accept: {key}\r\n\r\n',         )         guid = "258eafa5-e914-47da-95ca-c5ab0dc85b11"          raw_key = re.search('sec-websocket-key:\s+(.*?)[\n\r]+', get)          if raw_key != none:              # create handshake answer...             key = raw_key.groups()[0].strip()             handshake_key = b64encode(sha1(key + guid).digest())             handshake = '\r\n'.join(websocket_answer).format(key=handshake_key)              # , send client             self.conn_.send(handshake)             self.handshaken_ = true             self.encoded_ = true          else:             print 'no key found during handshake.'             self.disconnect()       # handle json commands send client     def handle(self, cmd, params):         # doing stuff      def disconnect(self):         print 'disconnecting.'         pass   class mainserver(threading.thread):     def __init__(self):         threading.thread.__init__(self)         self.host = ''         self.port = 3003         self.socket_ = socket.socket(socket.af_inet, socket.sock_stream)         try:             self.socket_.bind((self.host, self.port))         except socket.error msg:             print 'bind failed. error code : ' + str(msg[0]) + ' message ' + msg[1]             sys.exit()          self.clients_ = {1: player(1), 2: player(2)}         self.q_ = queue()      def run(self):          self.socket_.listen(10)          nb_player = 0         new_id = 1         while nb_player < 2:             conn, addr = self.socket_.accept()             print 'a new player connected ' + addr[0] + ':' + str(addr[1])             self.clients_[new_id].conn = conn             th = clientthread(conn, new_id, self.q_)             th.start()             new_id += 1             nb_player += 1          while true:             data = self.q_.get(block=true)             self.handle(data['cmd'], data['params'])      def handle(self, cmd, params):         # doing stuff   if __name__ == '__main__':      serv = mainserver()     serv.start() 

please tell me if need other information. ! robin


Comments