Я пытаюсь создать простую серверную / клиентскую программу на основе сокетов в python.
Я хочу, чтобы программа работала по всему миру, поэтому я настроил перенаправление портов на моем маршрутизаторе на мой статический IP-адрес моего ноутбука(сервер)
Когда я работаю как на сервере, так и на клиенте, программа работает.Но когда я закрываю одно из двух, исключение не вызывается.
, если я запускаю клиентскую программу со статическим ip моего ноутбука, она работает отлично и выдает ошибку.
Я пыталсяпереключение между статическими локальными IP-адресами и глобальными адресами маршрутизатора моего маршрутизатора.вот как я понял, в чем проблема
код сервера:
import socket
import time
def main():
sock = socket.socket()
sock.bind(('', 9000))
while True:
print("[!] Waiting for connections...")
sock.listen(1)
try:
(client_sock, client_addr) = sock.accept()
print("[+] " + gettime(client_addr) + " has connected")
while True:
try:
data = client_sock.recv(1024)
print("[+] " + gettime(client_addr) + " TYPED: " + str(data)[2:len(str(data))-1])
except Exception as err:
print("[-] " + gettime(client_addr) + " ERROR: " + str(err))
client_sock.close()
break
except Exception as err:
print("[-] " + time1 + ": ERROR! " + str(err))
def gettime(client_addr):
time1 = time.localtime()
time1 = (str(time1[2]) + "/" + str(time1[1]) + "/" + str(time1[0]) + " : " + str(time1[3]) + ":" + str(time1[4]) + ":" + str(time1[5]))
return str(time1 + ": " + client_addr[0])
if __name__ == "__main__":
main()
код клиента:
import socket
import time
def main():
while True:
try:
sock = socket.socket()
sock.connect(('', 9000))
while True:
sock.send(str.encode(input("What do you want to send ?")))
except:
sock.close()
time.sleep(5)
if __name__ == "__main__":
main()
Я ожидаю, что если одна из сторон будет неожиданно завершенаэто вызовет ошибку при работе через ту же работу, что и при работе с помощью справки lan
.спасибо.