Я пишу приложение, которое должно прослушивать клиента, и когда оно подключается, оно должно получить некоторые данные.Он отлично работает, когда я запускаю его локально на своем компьютере или на сервере, но когда я пытаюсь запустить его на сервере и подключиться с моего компьютера, он вообще не работает.Время соединения истекло.
Я попытался запустить программу, а затем проверить netstat (на сервере), и он показывает только то, что для моего хоста установлено значение localhost.Если я установлю свой хост на IP-адрес сервера (или имя хоста, или socket.getfqdn()
), то в netstat ничего не появится.
Код выглядит следующим образом:
class Listen(threading.Thread):
def __init__(self):
self.PORT = 2079
self.HOST = socket.getfqdn()
threading.Thread.__init__(self)
self.finished = threading.Event()
def stop(self):
self.finished.set()
self.join()
def run(self):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((self.HOST, self.PORT))
server.listen(5)
while not self.finished.isSet():
try:
server.settimeout(1)
channel, details = server.accept()
server.settimeout(None)
Client(channel, details).start()
except socket.timeout:
pass
class Client(threading.Thread):
def __init__(self, channel, details):
self.channel = channel
self.details = details
self.log = []
threading.Thread.__init__(self)
def run(self):
print 'Received connection:', self.details [ 0 ]
entries = int(self.channel.recv(3))
print "Receiving", entries, "new entries"
for i in range(entries):
self.log.append([])
self.log[i].append(float(self.channel.recv(10)))
self.log[i].append(float(self.channel.recv(10)))
self.log[i].append(self.channel.recv(14))
self.channel.close()
print 'Closed connection:', self.details [ 0 ]
print "The obtained log: "
print self.log
def main():
listen = Listen()
listen.start()
while True:
input = raw_input(">>").lower()
if input in ["start"]:
if listen.isAlive():
print "Already started"
else:
listen = Listen()
listen.start()
if input in ["stop"]:
if not listen.isAlive():
print "Already stopped"
else:
listen.stop()
if input in ["exit"]:
if listen.isAlive():
listen.stop()
sys.exit()
if input in ["status"]:
print "The server is " + ["not ", ""][listen.isAlive()] + "running"
if __name__ == '__main__':
main()