2013-05-30 24 views
1

我的目標是檢查GPSd是否在端口2947上運行,如果它在x秒內再次檢查。如果它未啓動GPSd,則在X秒後再次檢查。python:測試GPSd插座(2947)永遠不能連接第二次+時間

我的問題是它從來沒有通過/連接第二個++的時間。

我的代碼:

import socket 
import os 
import time 

#Simply change the host and port values 
host = 'localhost' 
port = 2947 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

while 1: 
try: 
    s.connect((host, port)) 
    s.shutdown(2) 
    #s.close() DIDN'T WORK 
    print "Success connecting to " 
    print host + " on port: " + str(port) 
    time.sleep(20) 
except: 
    print "Cannot connect to " 
    #os.system("sudo killall gpsd") 
    #os.system("sudo gpsd /dev/ttyAMA0 -n -F /var/run/gpsd.sock") 
    print host + " on port: " + str(port) 
    #os.system("sudo killall gpsd") 
    #os.system("sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock") 
    time.sleep(3) 

我得到什麼:

成功連接到
本地主機端口:2947
無法連接到
本地主機端口:2947
無法連接到
本地網站已發佈:localhost代碼:2947

我已經嘗試過所有我能想到的,但因爲我不認爲我明白是什麼導致問題沒有太大的幫助。

回答

0

我相信你在打電話關機後應該打電話關閉。

+0

我在's.shutdown(2)'後試過's.close()',但沒有奏效。 – JHub42

0

我相信你在重新呼叫一個connect在你20秒前關機的同一個插座上。可悲的是,不能那樣做。

對於文檔的socket.shutdown說:

"Lasciate ogne speranza, voi ch'intrate"

這種鬆散的翻譯:

socket.shutdown(how) 

    Shut down one or both halves of the connection. If how is SHUT_RD, 
further receives are disallowed. If how is SHUT_WR, further sends are 
disallowed. If how is SHUT_RDWR, further sends and receives are disallowed. 

「socket.close()`比這更決賽:

all future operations on the socket object will fail. 

您可以將s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)移動到循環中在try聲明之後......我只是不知道你爲什麼要繼續朝這個方向前進。