处理完成后退出代码-1073741819(0xC0000005)[python,socket]

时间:2017-03-16 13:02:27

标签: python-2.7 sockets

  1. os - windows server 2012
  2. python - 2.7.11
    该程序是用于在套接字上接收数据的服务器端代码 但有时会抛出错误,我不知道它可能在哪里 我附上了代码样本

    import sys, socket, datetime, threading
    import conf, work_with_DB, log
    import subprocess

    class socket_server(): def __init__(self, ip, port): self.ip = ip self.port = port #asyncore.dispatcher.__init__(self) sys.setrecursionlimit(10000) # write to log log.logging('time %s' % datetime.datetime.now(), self.port) #log.logging('create socket on -> %s' % conf.LOCAL_server_ip[0]) log.logging('create socket on -> %s:%d' % (self.ip, self.port), self.port) #print 'create socket on -> %s' % conf.LOCAL_server_ip[0] print 'create socket on -> %s:%d' % (self.ip, self.port) self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # write to log log.logging('bind to socket', self.port) print 'bind to socket' #sock.bind(conf.LOCAL_server_ip) self.sock.bind((self.ip, self.port)) # write to log log.logging('listen socket...', self.port) print 'listen socket...' self.sock.listen(5) def run(self): self.conn, self.addr = self.sock.accept() # write to log #log.logging('accept connection from -> ip=%s' % addr[0]) log.logging('accept connection from -> %s:%s...time =%s' % (self.ip, self.port, datetime.datetime.now()), self.port) #print 'accept connection from -> ip= %s, port= %s...time= %s' % (addr[0], addr[1], now_time) print 'accept connection from -> %s:%s...time =%s' % (self.ip, self.port, datetime.datetime.now()) while True: # receiving TCP-data self.query_from_MES = self.conn.recv(10000).strip() if not len(self.query_from_MES) == 0: # log.logging('receive from -> ip =%s, port =%s...time =%s' % (addr[0], addr[1], now_time)) log.logging('receive from -> %s:%s...time =%s' % (self.ip, self.port, datetime.datetime.now()), self.port) print 'query -> %s' % (self.query_from_MES) log.logging('query -> %s' % (self.query_from_MES), self.port) flag = self.query_from_MES[0:3] print 'flag -> %s' % (flag) log.logging('flag -> %s' % (flag), self.port) if flag == 'REQ': answer = self.query_from_MES + work_with_DB.get_last_receiving_data(self.port) print 'request from -> %s:%s' % (self.ip, self.port) log.logging('request from -> %s:%s' % (self.ip, self.port), self.port) print 'sent to MES -> %s...time =%s' % (answer, datetime.datetime.now()) log.logging('sent to MES -> %s...time =%s' % (answer, datetime.datetime.now()), self.port) # send answer to client self.conn.send(answer) else: answer = work_with_DB.upload_data(self.query_from_MES[0:4000], self.port) return_msg = self.query_from_MES[0:45] + answer print 'send data from %s:%s' % (self.ip, self.port) log.logging('send data from %s:%s...time =%s' % (self.ip, self.port, datetime.datetime.now()), self.port) print 'sent to MES -> %s...time =%s' % (return_msg, datetime.datetime.now()) log.logging('sent to MES -> %s...time =%s' % (return_msg, datetime.datetime.now()), self.port) self.conn.send(return_msg) if answer[0:2] == conf._SEND_ERROR: #print 'address =%s:%s...sleep 5 seconds...' % (self.ip, self.port) #log.logging('address =%s:%s...sleep 5 seconds...' % (self.ip, self.port)) #time.sleep(5) #self.conn.settimeout(10) print 'connection closed' log.logging('connection closed', self.port) self.conn.close() #print 'socket closed' #log.logging('socket closed') #self.sock.close() try: self.run() print 'restart server' log.logging('restart server...', self.port) except Exception as e: # returns the name of the exception print '__________EXCEPTION__________ %s :%s' %(type(e).__name__, e.message) # returns the name of the exception log.logging('__________EXCEPTION__________ %s :%s' % (type(e).__name__, e.message), self.port) print 'START anew socket_server_9217' log.logging('START anew socket_server_9217', self.port) subprocess.Popen("socket_server_9217", shell=False) else: #print 'address =%s:%s...sleep 5 seconds...' % (self.ip, self.port) #log.logging('address =%s:%s...sleep 5 seconds...' % (self.ip, self.port)) #time.sleep(5) #self.conn.settimeout(10) print 'connection closed' log.logging('connection closed', self.port) self.conn.close() #print 'socket closed' #log.logging('socket closed') #self.sock.close() try: self.run() print 'restart server' log.logging('restart server...', self.port) except Exception as e: # returns the name of the exception print '__________EXCEPTION__________ %s :%s' % (type(e).__name__, e.message) # returns the name of the exception log.logging('__________EXCEPTION__________ %s :%s' % (type(e).__name__, e.message), self.port) print 'START anew socket_server_9217' log.logging('START anew socket_server_9217', self.port) subprocess.Popen("socket_server_9217", shell=False) s = socket_server(conf._IP, conf._PORT_9217) s.run()

0 个答案:

没有答案