2016-04-22 8 views
0

Ich versuche, ein externes Python-Skript mit einem C++ - Programm zu kommunizieren, das qt-Scripting ermöglicht. Das Ziel ist es, das C++ - Programm (mit seinen qtscript API-Funktionen) teilweise aus Python-Code zu steuern.Sockets Kommunikation zwischen QTScript und Python

Ich weiß, wie man einen einfachen Socket-Server/Client in Python erstellen:

#Server code 

import socket 

server = socket.socket() 
server.bind (("localhost", 8080)) 
server.listen(10) 
client, client_adress = server.accept() 

while True: 
    message= cliente.recv(1024) 
    if message== "quit": 
     break 
    print "Received:", message 
    client.send(message) 

print "Goodby" 
cliente.close() 
server.close() 

...

#client code 

import socket 
client = socket.socket() 
client.connect(("localhost", 8080)) 

while True: 
    message = raw_input(">") 
    client.send(message) 
    if message == "quit": 
     break 

print "Goodby" 

Aber ich nicht viel Informationen zu finden kann, wie es in QtScript zu tun (Keine JavaScript Erfahrung), Ich weiß, es gibt die QTcpSocket Class, aber ich bin nicht wirklich sicher, wo ich anfangen soll, ein Snipet wie die Python zu bekommen, die ich habe Es gibt diese question, aber nicht nützliche Hinweise für mich ... und dort ist das samples aber ich kann nicht m ake es funktioniert.

Was ist besser, der Client oder der Server in Python? Konnte ich ein qtscript Beispiel finden?

Vielen Dank im Voraus!

Antwort

0

Es klingt, als ob Sie einen QtScript (Javascript) Interpreter in Ihrem Qt C++ Programm laufen haben. Und Sie möchten, dass ein Python-Client Befehle an sie senden kann. Der einfachste (aber nicht der sicherste!) Weg, dies zu tun, wäre, den Python-Client entweder mit Basic TCP oder mit HTTP POST zu verbinden, ein ausführbares Javascript-Programm zu senden und das C++ - Programm intern ausführen zu lassen.

Auf diese Weise ist die Python-Seite ziemlich trivial. Für die C++ Seite würden Sie zuerst eine QTcpServer erstellen und dann, wenn sie Daten empfängt, alles lesen und die Zeichenfolge an QScriptEngine::evaluate() übergeben. Wie man QTcpServer benutzt, sehen Sie hier: http://doc.qt.io/qt-5/qtnetwork-fortuneserver-example.html

+0

Dank John !! Sie sind direkt am Ziel, beginne ich ein paar Dinge zu testen und bauen einen Prototyp: https://github.com/hasielhassan/Python2QtScript-SocketServer/tree/master/code Aber ich mit dem QByteArray Daten bin zu kämpfen Geben Sie die Befehle ein, die ich sende, und validiere sie. Ich denke, dass ich es in eine Zeichenfolge konvertieren muss, aber ich fand es komplexer, wie ich erwartet habe, die entsprechenden Zeilen sind die folgenden: https://github.com/hasielhassan/Python2QtScript-SocketServer/blob/master/code/SocketServer .js # L79 Haben Sie Hinweise, wie Sie damit fortfahren können? Gibt es eine andere Möglichkeit, die Daten zu validieren, um entsprechend zu reagieren? – hasielhassan

+0

@hasielhassan: Gern geschehen. Ich bin mir nicht sicher, was du jetzt fragst. Wenn Sie nicht weiterkommen, sollten Sie eine neue Frage mit diesen Details posten. –

+0

Hi, am Ende finde ich einen Weg, um die Werte des QByteArray in eine Zeichenfolge, vielleicht ist es nicht die beste, aber seine Arbeit ... https://github.com/hasielhassan/Python2QtScript-SocketServer/commit/8d9a18c8677769cb459ceb459d5bcc4e94155545 – hasielhassan