Устранение неполадок сервера / клиента сокета Python с помощью перенаправления портов - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь создать простую серверную / клиентскую программу на основе сокетов в 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

.спасибо.

...