Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    12

    [QT] Realizzazione Client-Server in Qt e JavaScript

    Salve a tutti!
    Mi perdonerete se non scriverò cavolate o se utilizzerò una terminologia non correttissa, ma sono un principiante. Sto impazzendo da giorni per il seguente problema.
    Sotto ambiente linux (Ubuntu 14.04.2) sto cercando di realizzare un applicazione client-server (in una rete locale) con due client: un desktop-client (scritto in QT e C++) e un web-client (in javascript).

    Allegato 25580

    Utilizzando Node.js e Socket.io ho creato il server in js e un web-client accessibile tramite http://localhost:3000 (prendendo spunto dalla demo di socket.io). Fin qui nessun problema.
    Tuttavia, dopo giorni di tentativi falliti, mi son rassegnato al fatto che non è possibile integrare facilmente socket.io in QT per la realizzazione de client desktop.

    Qualcuno saprebbe consigliarmi come procedere? Avete tutorial o soluzioni alternative a node.js/socket.io?
    Grazie anticipatamente a tutti coloro che proveranno ad aiutarmi!

  2. #2
    mi son rassegnato al fatto che non è possibile integrare facilmente socket.io in QT per la realizzazione de client desktop
    Se invii i dati tramite normali socket non ci dovrebbe essere alcun problema... che tentativi hai fatto/che problemi hai incontrato?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Secondo me dovresti studizare le cose in modo separato.
    farti cioè un componente http server in qt e poi una classe in javascript.
    Io ad esempio nei dispositivi embedded basati su linux metto un componente qt http server 8scritto da me) poi faccio l'area web in javascript 8non avendo un server php).
    Non è facile ma si può fare.
    Se invece usassi freepascal lato server è già tutto pronto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    12
    Grazie ad entrambi per le risposte e scusate per il ritardo, ma sono stato lontano per motivi di salute.


    Quote Originariamente inviata da denis76 Visualizza il messaggio
    Secondo me dovresti studizare le cose in modo separato.
    farti cioè un componente http server in qt e poi una classe in javascript.
    Io ad esempio nei dispositivi embedded basati su linux metto un componente qt http server 8scritto da me) poi faccio l'area web in javascript 8non avendo un server php).
    Non è facile ma si può fare.
    Soluzione interessante! Non sono molto esperto al momento in qt per una cosa del genere, ma studierò la ta proposta.


    Quote Originariamente inviata da denis76 Visualizza il messaggio
    Se invece usassi freepascal lato server è già tutto pronto.
    Purtroppo sono costretto ad utilizzare QT.


    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Se invii i dati tramite normali socket non ci dovrebbe essere alcun problema... che tentativi hai fatto/che problemi hai incontrato?
    In questo momento sto provando la classe QWebSocket, appena raggiunto un ponto stabile posto il codice. Probabilmente è una domanda stupida, ma passatemela : può QWebSocket essere compatibile con socket.io?


    Grazie ancora e buona serata!
    Ultima modifica di Athair90; 30-03-2015 a 20:44

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    12
    /********************** CODICE **************************/


    Ecco ciò che ho realizzato (in versione semplificata) fin'ora: il server e il webclient. Manca il client QT.




    codice:
    <!-- client.js 
    	Il WebClient è composto da due bottoni, #Bt1 e #Btn2. Cliccando uno dei due bottoni si inverà al server il valore 1 o 2.
    	Il server si occuperà di di inviare a tutti i client che lo stamperanno in #state. 
    -->
    
    
    <html>
    <head>
        <title>WebClient</title>
    	<script src="http://localhost:3000/socket.io/socket.io.js"></script>
    	<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    </head>
    <body>
    
    
    <form action="" name="f">
    	<button id="btn1" type="button" onClick="submitFunction(1)">Btn1</button>
    	<button id="btn2" type="button" onClick="submitFunction(2)">Btn2</button>
    	<span id="state">STATE (0)</span>
    </form>
    	
    <SCRIPT>
    	var socket = new io.connect('localhost:3000'); 
    		 
    	function submitFunction(i) {
    			if (i==1){
    				console.log(i);
    				socket.emit('pState', i); 
    			}
    			if (i==2){ 
    				console.log(i);
    				socket.emit('pState', i);
    			}
    	}
    		
    	socket.on('pState', function(msg){
    			if (msg==1){
    				$('#state').text("STATE (" + msg + ")");
    			}
    			if (msg==2){
    				$('#state').text("STATE (" + msg + ")");
    			}
    			
    	});
    </SCRIPT>
    
    
    </body>
    </html>
    codice:
    // server.js 
    
    
    var app = require('express')(); 
    var http = require('http').Server(app);
    var io = require('socket.io')(http); 
    http.listen(3000, function(){
      console.log('listening on *:3000');
    });
    app.get('/', function(req, res) {
      res.sendFile(__dirname + '/client.html');
    });
    io.on('connection', function(socket){  
      console.log('a user connected');		
      socket.on('disconnect', function(){
        console.log('user disconnected');
      });
    });
    
    
    // il server riceve il valore 1/2 e lo rimanda ai client
    io.on('connection', function(socket){
      socket.on('pState', function(msg){ 
        console.log('STATE: ' + msg);
        io.emit('pState', msg);
      });
    });

  6. #6
    Bé, ormai direi che sei ben avviato.
    Io mi sono sviluppato un componente qt http server basato su thread che uso in tutti i miei applicativi (supporta autenticazione e quant'altro). Sono poche centinaia di righe ma molto sudate! Se però leggi nei vari forum tutti usano l'approccio ad eventi e non ai thread. Io invece adoro i thread.
    Per quanto riguarda il colloquio io su http invoco api http - xml autenticate base64 sempre e comunque. Non uso componenti di terze parti (come jquery).
    Cosa stai sviluppando di bello?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    12

    soluzione e nuovo problema!

    Salve a tutti!
    Sto provando a realizzare questo collegamento perché sempre più spesso mi capita l'esigenza di doverne far uso, tanto vale imparare

    Ho fatto parecchi passi avanti: ho utilizzato moduli e librerie che supportano WebSocket standard, ovvero ws per node.js e QWebSocket per Qt.
    Ora riesco a far comunicare i vari client col server. In questo esempio il WebClient e il QtClient inviano "Hello World!" al server non appena si connettono:
    codice:
    # mainwindow.cpp (QtClient)
    void MainWindow::onConnected()
    {
        connect(&m_webSocket, &QWebSocket::textMessageReceived, this, &MainWindow::onTextMessageReceived);
        m_webSocket.sendTextMessage(QStringLiteral("Hello World! - from QtClient"));
    }
    
    # index.html (WebClient)
    socket.onopen = function() {
        socket.send("Hello World! - from WebClient"); 
    };
    
    # server.js
    socket.on('connection', function(ws) {
      ws.on('message', function(message) {
        var m = JSON.parse(message);
        console.log(m);
      });
    });
    
    # console node
    C:\Users\PietroP\Desktop\cs\v0.3>node server.js
    Server connect on http://192.168.1.60:3000/
    a user connected
    Hello World! - from WebClient
    a user connected
    Hello World! - from QtClient

    Utilizzando JSON riesco anche ad inviare un array dal WebClient al server.
    codice:
    # index.html (WebClient)
    socket.onopen = function() {  
            var array = {
                value1: "WebClient value1 = v1", 
                value2: "WebClient value2 = v2"
            };
            socket.send(JSON.stringify(array), {binary: true, mask: false}); 
    };
    
    # server.js
    socket.on('connection', function(ws) {
      ws.on('message', function(message) {
        var array = JSON.parse(message);
        console.log(array["value1"]);
        console.log( array["value2"]);
      });
    });
    
    # console node
    C:\Users\PietroP\Desktop\cs\v0.3>node server.js
    Server connect on http://192.168.1.60:3000/
    a user connected
    WebClient value1 : v1
    WebClient value2 : v2
    Tuttavia in QT il metodo QWebSocket.sendTextMessage(QString s) non prevede l'invio di array (ne tantomeno JSON) e non riesco a trovare un metodo che possa farlo!
    Qualcuno saprebbe come fare? Devo aprire un nuovo topic per questa domanda?
    Grazie a tutti in ogni caso!

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.