我的目标是检查GPSd是否在端口2947上运行,如果它在x秒内再次检查。如果它没有启动GPSd,则在X秒内再次检查。
我的问题是它从未在第二次++时间传递/连接。
我的代码:
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)
我得到了什么:
成功连接到
localhost on port:2947
无法连接到
localhost on port:2947
无法连接到
localhost on port:2947
我已经尝试了我能想到的一切,但因为我认为我不明白导致问题的原因并没有多大帮助。
答案 0 :(得分:0)
我相信你应该在你打电话后关闭电话。
答案 1 :(得分:0)
我相信你在20秒前关闭的同一个套接字上重新调用connect
。可悲的是,不能这样做。
对于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
移动到循环中......我只是不知道您为什么要朝这个方向前进。