Ошибка сокета в Python при отправке данных на сервер - PullRequest
0 голосов
/ 10 апреля 2020

У меня проблема при отправке данных с клиента на сервер в python INET Потоковый сокет. Я отправляю словарь, используя библиотеку json из python, и на стороне сервера я создаю объект Ticket и сохраняю его в моей базе данных MySQL. На данный момент, у программы нет проблем, но, когда я пытаюсь сохранить другой тикет в том же эйюжинге клиента, сервер не получает данные и тикет не сохраняет в БД. Любые решения?

В server.py

def thread_fuction(port,sock):
    while True:
        msg = clientsocket.recv(1024)
        print(f"Recibido  del puerto {port} atendido por PID {os.getpid()}:  {msg.decode()}")
        logger(sock,msg)

        if (msg.decode() == 'INSERTAR'):
            dict_data=sock.recv(1024).decode()
            final_data=json.loads(dict_data)
            final_data=dict(final_data)
            for key,value in final_data.items():
                if key == "autor":
                    autor=value
                elif key == "titulo":
                    titulo=value
                elif key == "descripcion":
                    descripcion=value
                elif key == "estado":
                    estado=value
            print(final_data)
            ticket=Ticket(autor=autor,titulo=titulo,descripcion=descripcion,estado=estado,fecha=datetime.now())
            session.add(ticket)
            session.commit()
            break

# creamos el objeto socket
try:
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
    print('Fallo al crear el socket!')
    sys.exit()

#Establecemos parametros
host = "localhost"
port = int(8070)

# Blindeamos el puerto y el host
serversocket.bind((host, port))

# Establecemos 5 peticiones de escucha como maximo.
serversocket.listen(5)
if __name__ == "__main__":
    while True:
        # establish a connection
        clientsocket, addr = serversocket.accept()
        print('Conexion establecida: SERVER ON')
        conection=Thread(target=thread_fuction,args=(port,clientsocket))
        conection.start()

В client.py

try:
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print("Socket Creado!")
except socket.error:
    print ('Fallo al crear el socket!')
    sys.exit()

host = "localhost"
port = int(8070)

client_socket.connect((host, port))
print ('Socket conectado al host', host, 'en el puerto', port)


while True:
    print("""\n
        \t\t\t *** Menu ***
        - INSERTAR TICKET (INSERTAR)
        - SALIR (SALIR)
        """)

    opcion = input('Opcion: ').upper()

    client_socket.sendto(opcion.encode(), (host, port))
    if (opcion == 'INSERTAR'):
        autor = input("\nIngrese autor del Ticket: ")
        titulo = input("\nIngrese titulo del ticket: ")
        descripcion = input("\nIngrese descripcion del ticket: ")
        estado = input("\nIngrese estado del ticket (pendiente, en procesamiento o resuelto): ")
        while validar_estado(estado):
            estado=input("Estado debe ser uno de los pedidos, intentelo nuevamente): ")
        data={"autor":autor,"titulo":titulo,"descripcion":descripcion,"estado":estado}
        json_data=json.dumps(data) #Convertimos el diccionario a JSON
        client_socket.sendto(json_data.encode(),(host,port))
...