publi c IPv4-адрес aws не работает с python сценарием сервера сокетов - PullRequest
0 голосов
/ 01 апреля 2020

Итак, я создал серверный скрипт с сокетом python, который я хочу запустить на сервере aws ec2 Amazon Linux. Поэтому я подумал, что адрес ipv4 (например, 3.12.34.567), показанный на главной странице ec2, может быть непосредственно добавлен в socket.AF_ INET, а также добавлен в клиентский скрипт. Но после того, как я это сделал, aws говорит, что не может подключиться к адресу. Что мне делать. Ниже мой серверный скрипт. Если вы можете отредактировать код. После моего исследования я узнал, что это не настоящий publi c ipv4. поэтому вы также можете рассказать мне, как найти или настроить настоящий publi c ipv4 aws ec2 server. Также, пожалуйста, если вы можете редактировать мой код.

импорт сокетов импорт sqlite3

def Main ():

port = 4000
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

s.bind(("3.12.34.567",port))

print("Server started")
while True:
    reg_db = sqlite3.connect("reg_db.db")
    reg_db_cur = reg_db.cursor()

    unp_db = sqlite3.connect("unp_db.db")
    unp_db_cur = unp_db.cursor()

    '''first quadrant table : f_q_table
       second quadrant table : s_q_table
       third quadrant table : t_q_table
       fourth quadrant table : fourth_q_table'''

    data, addr = s.recvfrom(1024)
    data = data.decode('utf-8')
    data = eval(data)

    if data[0] == "acc":
        data.remove(data[0])
        username = data[0].lower()
        email = data[1].lower()

        email = email.replace("@","_")


        password = data[2].lower()

        success = None

        unp_db_cur.execute("SELECT email FROM accounts where email = "+"'"+email+"'")
        res = unp_db_cur.fetchall()
        if len(res) == 0:
            try:

                unp_db_cur.execute("INSERT INTO accounts values("+"'"+email+"',"+" '"+username+"', "+"'"+password+"')")
                unp_db.commit()
                unp_db_cur.execute("SELECT * FROM accounts")
                print(unp_db_cur.fetchall())
                s.sendto("ACCOUNT CREATED".encode("utf-8"),addr)

            except:
                print("DATABASE REGISTRATION ERROR")
        elif len(res) ==1:
            print("email associated with account already exist")



    elif data[1] == "ch_acc_cred":
        email_ch = data[0][0].replace("@","_")
        name_ch = data[0][1]
        pw_ch = data[0][2]

        unp_db_cur.execute("SELECT * FROM accounts WHERE email ="+"'"+email_ch+"'")
        ch_res = unp_db_cur.fetchall()

        if ch_res == [] :
            print("no accounts associated with the email")
            s.sendto("error_lia".encode("utf-8"), addr)
        elif  ch_res[0][2]== pw_ch:
            print("Login success")
            s.sendto(str(["verified",ch_res[0][1]]).encode("utf-8"),addr)


    elif data[0] == "tr_reg":
        lat = data[1][0]
        lon = data[1][1]

        if lon >= 0 and lat >= 0:
            print("INSERT INTO f_q_table values('"+str(lon)+"', '"+str(lat)+")")
            reg_db_cur.execute("INSERT INTO f_q_table values('"+str(lon)+"', '"+str(lat)+"')")
    else:

        print("message from : ", addr)
        print("message : ",data)

        temp = data

    # the data from the client is of the form [[lo,lo*],[la,la*]]
        lo = temp[0][0]
        lo_p = temp[0][1]
        la = temp[1][0]
        la_p = temp[1][1]

        text = ""
        if lo >= 0 and la >=0:
            text = "FIRST QUADRANT"
            print(text)
            reg_db_cur.execute("SELECT DISTINCT * FROM f_q_table WHERE lon > %s AND lon < %s AND lat > %s AND lat < %s"%(lo,lo_p,la,la_p))
            coordinates = reg_db_cur.fetchall()

            coordinates = str(coordinates)
            print("sending : ", coordinates)
            s.sendto(coordinates.encode('utf-8'), addr)

        elif lo_p < 0 and la >= 0:
            text = "SECOND QUADRANT"
            print(text)
        elif lo_p < 0 and la_p < 0:
            text = "THIRD QUADRANT"
            print(text)
        elif lo >= 0 and la_p < 0:
            text = "FOURTH QUADRANT"
            print(text)
        else:
            text = "unidentified... but will find tomorrow"

if name == " main": Main (). Run ()

...