服务器拒绝连接,重启客户端后恢复
下面是我在一个服务中运行的代码。大部分时间,这个脚本运行得很好,可以持续好几天或几周,直到它出现问题崩溃。我对崩溃的部分并不太担心,因为我可以通过错误日志找到原因并进行修复。现在我遇到的问题是,有时候当服务重启并尝试再次连接到服务器时,会出现一个 (10061, 'Connection refused')
的错误,这样服务就无法重新启动。奇怪的是,当连接被拒绝时,并没有任何正在运行的python进程。也就是说,没有名为 "pythonw.exe" 或 "pythonservice.exe" 的进程。值得注意的是,在我重启运行客户端脚本的电脑之前,我也无法用其他机器连接到服务器。客户端机器上运行的是python 2.7,操作系统是Windows Server 2003。同时需要说明的是,服务器的代码是在我无法接触到的硬件上编写的。
try:
EthernetConfig = ConfigParser()
EthernetConfig.read('Ethernet.conf')
HOST = EthernetConfig.get("TCP_SERVER", "HOST").strip()
PORT = EthernetConfig.getint("TCP_SERVER", "PORT")
lp = LineParser()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
reader = s.makefile("rb")
while(self.run == True):
line = reader.readline()
if line:
line = line.strip()
lp.parse(line)
except:
servicemanager.LogErrorMsg(traceback.format_exc()) # if error print it to event log
s.shutdown(2)
s.close()
os._exit(-1)
2 个回答
1
“连接被拒绝”是一个错误提示,意思是你想连接的另一端的程序没有接受你的连接请求。很可能是它没有注意到你已经崩溃了,所以没有关闭它的连接。
你可以做的就是稍微等一会儿(30到60秒),然后再试一次。可以把这个过程放在一个循环里,希望另一端能注意到连接已经断开,这样它就能再次接受新的连接了。
0
原来网络管理员把我想连接的端口给关了。这个端口只对一个IP开放,而那个IP是服务器的。问题在于,这台服务器有两个网卡,每个网卡都有不同的IP。现在这个问题已经解决了。