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()