Python 错误61连接被拒绝&;Echo服务器上的对等端重置连接时出错54
我在寻求帮助!!!!!我是Python的新手,所以请和我一起学习。我正在尝试创建一个Echo服务器,其中包含客户端。一个检查MySQL,另一个检查服务器上的端口。客户端将数据发送到Echo服务器,服务器将数据发送回所有连接的客户端 它运行了大约2个小时,然后出现如下错误:Python 错误61连接被拒绝&;Echo服务器上的对等端重置连接时出错54,python,Python,我在寻求帮助!!!!!我是Python的新手,所以请和我一起学习。我正在尝试创建一个Echo服务器,其中包含客户端。一个检查MySQL,另一个检查服务器上的端口。客户端将数据发送到Echo服务器,服务器将数据发送回所有连接的客户端 它运行了大约2个小时,然后出现如下错误: [Errno 54] Connection reset by peer [Errno 61] Connection refused 系统: MAC OS X Lion 10.7.3 内存:5GB 处理器:2.2 GHz In
[Errno 54] Connection reset by peer
[Errno 61] Connection refused
系统:
MAC OS X Lion 10.7.3
内存:5GB
处理器:2.2 GHz Intel Core 2 Duo
这是最好的方法吗?
最好的方法是什么?请帮忙
这是我的密码:
class Database(Process):
def __init__(self):
super(Database, self).__init__()
self.is_stop = Event()
self.is_stop.clear()
_cfg = cfg.Config().DataBase()
self.dbHost = _cfg.dbHost
self.dbUser = _cfg.dbUser
self.dbPass = _cfg.dbPass
self.dbName = _cfg.dbName
self.dbPort = _cfg.dbPort
def run(self):
print "Database pid %s" % self.pid
while not self.is_stop.is_set():
rows = self.getData()
for row in rows:
vTable = str(row[0])
vType = str(row[1])
vStatus = str(row[2])
sData = 'table:'+vTable+',action:'+vType+',data: '
try :
time.sleep(2)
conn = self.createSocket()
conn.sendall(sData+"\0")
self.delPollData(vTable,vType,vStatus)
if socket.timeout:
#log.debug("Database Socket Timedout")
continue
else:
data = conn.recv(1024)
continue
conn.close()
conn = None
time.sleep(2)
except:
time.sleep(2)
e = sys.exc_info()[1]
print "Database Error: %s" %e
log.debug("Database Error: %s" %e)
conn = self.createSocket()
conn.sendall(sData+"\0")
if socket.timeout:
log.debug("Database Socket Except Timedout")
continue
else:
data = conn.recv(1024)
continue
conn.close()
conn = None
time.sleep(2)
time.sleep(1)
def connect(self):
self.connection = MySQLdb.connect(host=self.dbHost,port=self.dbPort,user=self.dbUser,passwd=self.dbPass,db=self.dbName)
self.cursor = self.connection.cursor()
def commit(self):
self.connection.commit()
def disconnect(self):
self.cursor.close()
self.connection.commit()
self.connection.close()
def getData(self):
sqlcmd = """SELECT DISTINCT NAME, TYPE, STATUS FROM SERVER_AUDIT"""
try:
self.connect()
self.cursor.execute (sqlcmd)
result = self.cursor.fetchall()
self.disconnect()
except:
e = sys.exc_info()[1]
log.error("getData %s"%e, sys, traceback)
sys.exit(e)
return result
def createSocket(self) :
_cfgServer = cfg.Config().EchoServer()
EchoHost = _cfgServer.EchoServerHost
EchoPort = int(float(str(_cfgServer.EchoServerPorts)))
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
conn.settimeout(60.0)
conn.connect((EchoHost, EchoPort))
return conn
class pChecker(Process):
def __init__(self):
super(pChecker, self).__init__()
self.is_stop = Event()
self.is_stop.clear()
def check_server(self, address, port):
# Create a TCP socket
s = socket.socket()
try:
s.connect((address, port))
s.close()
return True
except:
return False
def createSocket(self) :
_cfgServer = cfg.Config().EchoServer()
EchoHost = _cfgServer.EchoServerHost
EchoPort = int(float(str(_cfgServer.EchoServerPorts)))
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
conn.settimeout(60)
conn.connect((EchoHost, EchoPort))
return conn
def run(self):
print "pChecker pid %s" % self.pid
while not self.is_stop.is_set():
modem1 = self.check_server('XX.X.X.XXX', XXX)
modem = ''
if modem1 != True :
modem = "modem1:connect,"
else:
modem = "modem1:disconnect,"
try :
time.sleep(2)
conn = self.createSocket()
conn.sendall("[modem]"+modem[:-1]+"\0")
#data = conn.recv(1024)
if socket.timeout:
#log.debug("pChecker Socket Timedout")
continue
else:
data = conn.recv(1024)
continue
conn.close()
conn = None
time.sleep(2)
except:
time.sleep(2)
e = sys.exc_info()[1]
log.error("pChecker %s"%e, sys, traceback)
conn = self.createSocket()
conn.sendall("[modem]"+modem[:-1]+"\0")
#data = conn.recv(1024)
if socket.timeout:
log.debug("pChecker Socket Timedout")
continue
else:
data = conn.recv(1024)
continue
#print data
conn.close()
conn = None
time.sleep(2)
class Server(Process):
def __init__(self):
super(Server, self).__init__()
self.is_stop = Event()
self.is_stop.clear()
def run(self):
print "Server pid %s" % self.pid
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server.bind((EchoHost,EchoPort))
self.server.listen(64)
self.input = [self.server]
try:
while not self.is_stop.is_set():
inputready,outputready,exceptready = select.select(self.input,[],[])
for s in inputready:
if s == self.server:
# handle the server socket
client, address = self.server.accept()
addrstr = '%s:%s' % (address[0],address[1])
ClientIP = str(address[0])
self.input.append(client)
elif s == sys.stdin:
# handle standard input
junk = sys.stdin.readline()
running = 0
else:
# handle all other sockets
try:
data = s.recv(1024)
#print "Send Data %s" %data
except IOError as e:
f = sys.exc_info()[1]
log.error("Server Error: %s" %f, sys, traceback)
if e.args[1].args[0].errno != errno.ECONNERSET:
raise
tempConn = self.input[1:len(self.input)]
if data:
for i in tempConn:
i.send(data)
if ClientIP != '10.0.1.2':
log.info('See to Client: %s data: %s'%ClientIP,data)
else:
s.close()
self.input.remove(s)
print "Server: exiting"
log.info("Server: exiting")
except:
e = sys.exc_info()[1]
log.error("Server Error: %s" %e, sys, traceback)
这对于echo服务器来说太复杂了。看一看这张照片。通常,在stackoverflow,我们通过有限的代码摘录(如果可能的话)来解决问题。如果你有明显超过20行,你正在寻找。phihag谢谢你的回复我看过这些文档,它没有显示如何发送到所有连接的客户端,它只显示一对一连接。