2017-03-08 3 views
0

j'ai très simple serveur java:Server sur java ne reçoit pas un message de client Qt

int port = 2245; 
     try { 
     ServerSocket ss = new ServerSocket(port); 
     System.out.println("Waiting for a client..."); 

     Socket incomingClient = ss.accept(); 
     InputStream i = incomingClient.getInputStream(); 
     OutputStream o = incomingClient.getOutputStream(); // Use it write to the Client Socket 
     InputStreamReader isr = new InputStreamReader(i); 
     BufferedReader br = new BufferedReader(isr); 
     String str = new String(); 

     while ((str = br.readLine())!=null){ 
       System.out.println("str = " + str); 
       o.write(123); //("message from server"); 
      } 
     } catch(Exception x) { x.printStackTrace(); } 

Et je client simple Qt, qui utilisent QNetworkAccessManager

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
QUrl url("http://127.0.0.1:2245"); 
url.port(6666); 
QByteArray postData; 
QNetworkRequest request(url); 
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); 

QString postKey("SomeKey"); 
postData.append(postKey); 
QObject::connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); 

Je déclarai mainwindow.h dans la fente replyFinished

public slots: 
void replyFinished(QNetworkReply* reply); 

dans le meilleur des cas serveur d'obtenir des en-têtes comme (POST/HTTP/1.1 Content-Type: application/x-www-form-urlencoded et d'autres)

Mais sur le serveur, je ne peux pas lire mon message du client et le client ne reçoit pas de réponse du serveur java

+0

Vous utilisez le port 2245 ou 6666? Ce ne peut être que l'un ou l'autre, pas les deux. – MrEricSir

+0

J'utilise 2245 port partout, désolé si cela vous a dérouté Serveur voir le client qt et même obtenir des données, mais je ne peux pas obtenir de réponse sur le client Qt de serveur Java – Dmitry

+0

Dans ce cas, quoi de neuf avec cette ligne: ' url.port (6666); ' – MrEricSir

Répondre

0

Le code correct pour le client Qt est la suivante:

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
QUrl url("http://192.168.0.101:8000"); 
url.port(8000); 

QByteArray postData; 
QNetworkRequest request(url); 
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); 

QString postKey("some data"); 
postData.append(postKey); 
QObject::connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); 

manager->post(request, postData); 

}

et obtenir une réponse Déclarez et mettre en œuvre la fente suivante

void MainWindow::replyFinished(QNetworkReply *reply){ 
qDebug() << "Status" << reply->errorString(); 
qDebug() << "Status" << reply->error(); 


    QByteArray data = reply->readAll(); //It's works! 
    qDebug() << "data: " << data; 

}

pour le côté serveur que je l'ai utilisé HttpServer, qui est disponible en dernière version de JDK