Держите сокет открытым, пока клиент не завершит работу - PullRequest
0 голосов
/ 28 декабря 2018

Я передаю лицензионный ключ пользовательского ввода (клиент) на валидацию (сервер), которая отображает пользовательский ввод в действительные лицензии в моем API лицензирования.Мне нужно, чтобы соединение с сервером оставалось открытым, пока клиент не отправит правильную лицензию - возможно, закройте соединение после 3 попыток.Когда я открываю сокет сервера, он закрывается при получении первого ввода от клиента - будь то хороший запрос или плохой.Как закрыть соединение только при успешной проверке?

Я попытался обернуть проверку проверки в цикл, но это становится рекурсивным, так как нам нужно, чтобы пользователь инициировал проверку проверки, когда он нажимает кнопку отправки из tkinter на клиенте.

import requests
from xml.etree import ElementTree as ET
import socket

key = '***'
secret = '***'
request_type = {'Content-type': 'text/xml', 'Accept': 'text/xml'}
productURL = 'https://'+key+':'+secret+'@www.sendowl.com/api/v1/products'
orderURL = 'https://'+key+':'+secret+'@www.sendowl.com/api/v1_3/orders'

order_id = []
lic_key = []

def Main():
    data = ""
    host = "127.0.0.1"
    port = 5000

    mySocket = socket.socket()
    mySocket.bind((host,port))

    mySocket.listen(5)
    conn, addr = mySocket.accept()
    print ("Connection from: " + str(addr))
    user_key = conn.recv(1024).decode()            

    order_response = requests.get(orderURL, headers=request_type)

    order_root = ET.fromstring(order_response.content)

    for child in order_root.iter('*'):
        if child.tag == 'id':
            order_id.append(child.text)

    i = 0
    while i < len(order_id):
        licenseURL = 'https://'+key+':'+secret+'@www.sendowl.com/api/v1/orders/'+order_id[i]+'/licenses'
        lic_response = requests.get(licenseURL, headers=request_type)
        lic_root = ET.fromstring(lic_response.content)

        for child in lic_root.iter('*'):
            if child.tag == 'key':
                lic_key.append(child.text)
        i += 1

    print("validating...........")
    if data != "SUCCESS":
        if user_key in lic_key:
            message = "Success"
        else:
            message = "Failure"    
        data = str(message).upper()
        print ("sending: " + str(data))
        conn.send(data.encode())

if __name__ == '__main__':
    Main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...