2011-10-31 75 views
0

以下是我在服務中運行的代碼。大多數情況下,腳本可以在天/星期運行良好,直到腳本打嗝和崩潰。我並不擔心崩潰的部分,因爲我可以適當地從錯誤日誌中解決錯誤日誌的原因。我面臨的問題是,有時當服務重新啓動並嘗試再次連接到服務器時,它會得到(10061, 'Connection refused')錯誤,以致服務無法再次啓動。奇怪的是,當連接被拒絕時,沒有python進程運行。 IE沒有與圖像名稱「pythonw.exe」或「pythonservice.exe」進程。應該指出,我無法連接到任何其他機器的服務器,直到我重置運行客戶端腳本的計算機。客戶端機器在Windows Server 2003操作系統上運行python 2.7。還應該注意的是,服務器是在一個我無法訪問代碼的硬件上編碼的。服務器單元拒絕連接I重置客戶端機器

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) 

回答

0

原來,網絡管理員有端口關閉,我試圖連接到。它對於屬於服務器的一個IP是開放的。問題在於服務器有兩個帶兩個獨立IP的網卡。問題現已解決。

1

連接被拒絕是一個錯誤,意味着連接另一端的程序不接受您的連接嘗試。很可能它沒有注意到你崩潰,並沒有關閉它的連接。

你可以做的僅僅是睡了一小會兒(30-60秒),然後再試一次,並在一個循環做到這一點,並希望另一端的通知,在斷開的連接,因此它可以再次接受新的連接。

+0

+1延遲是一個好主意,我會試試看。但是它仍然不能解釋爲什麼即使沒有python進程打開,我仍然無法連接到服務器。即使過了一段時間。 – Richard

+0

@Richard:不,這是拒絕連接的服務器,你的結局沒有任何錯誤。 –

+0

感謝您的幫助。我意識到服務器拒絕連接。閱讀文檔它一次只允許2個連接。我不明白的是,當我重置客戶端機器時,我能夠再次連接到服務器,這使我相信有一些東西在客戶端機器上使用連接,雖然我沒有證據證明它確實如此。 – Richard

相關問題