Python - выполнить команду MySQLdb и отправить ее клиенту через сокетное соединение - PullRequest
0 голосов
/ 26 января 2019

Я пытался использовать модуль MySQLdbsocket python для отправки команд MySQL с помощью модуля сокета. Команда, отправленная с клиента, выполняется на сервере, но только после того, как код клиента будет уничтожен. Как изменить код, чтобы сервер выполнял и отправлял команду клиенту?

Я пытался закрыть соединение, но это не сработало.

Сервер:

import socket
import MySQLdb
import time

class Server():
    def __init__(self, host, port, listen):
        self.host = host
        self.port = port
        self.listen = listen

    def connect(self, dbconfig):
        self.cnx = socket.socket()
        self.cnx.bind((self.host, self.port))

        self.cnx.listen(self.listen)
        self.c, self.addr = self.cnx.accept()

        self.conn = MySQLdb.connect(**dbconfig)
        self.cursor = self.conn.cursor()

    def send(self, msg):
        self.msg = msg
        self.c.send(self.msg)

    def receiveEx(self, int):
        self.int = int
        recv = self.c.recv(self.int)

        if recv == "" or recv == " ":
            pass
        else:
            self.cursor.execute(recv)
            self.conn.commit()
            results = self.cursor.fetchall()

            self.throw = self.c.recv(self.int) + "   <:>   " + str(results)
            return self.throw


    def kill(self):
        self.c.close()
        self.cursor.close()
        self.conn.close()


#TEST

dbconfig = {'host' : '127.0.0.1',
            'user': 'root',
            'password' : 'toor',
            'database' : 'MYtestDB'}


serv = Server("192.168.1.6", 80, 5)
serv.connect(dbconfig)

msg = serv.receiveEx(1024)
print(msg)
serv.send(msg)

time.sleep(20)

serv.kill()

Клиент:

import socket


class Client():
    def __init__(self, host, port, listen):
        self.host = host
        self.port = port
        self.listen = listen


    def connect(self):
        self.cnx = socket.socket()
        self.cnx.connect((self.host, self.port))


    def send(self, msg):
        self.msg = msg
        self.cnx.send(self.msg)

    def receive(self, int):
        self.int = int
        self.get = self.cnx.recv(self.int)
        return self.get

    def kill(self):
        self.cnx.close()


#TEST
cli = Client("192.168.1.6", 80, 5)
cli.connect()

while True:
    inp = raw_input("SQL> ")
    cli.send(inp)
    msg = cli.receive(1024)
    print(msg)

cli.kill()

Надеюсь, что сообщество может помочь. Заранее спасибо

...