2017-03-08 48 views
0

得到消息,我有很簡單的Java服務器:服務器上的Java不從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(); } 

而且我有簡單的Qt客戶端,使用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 *))); 

我mainwindow.h聲明in slot replyFinished

public slots: 
void replyFinished(QNetworkReply* reply); 

在最好的情況下,服務器得到一些標頭,如(POST/HTTP/1.1 內容類型:應用程序/ x-WWW窗體-urlencoded等)

但在服務器上我不能從客戶端 和客戶端閱讀我的郵件沒有收到從Java服務器

+0

您使用的端口2245或6666的最新版本?它只能是一個或另一個,而不是兩個。 – MrEricSir

+0

我使用2245端口無處不在,對不起,如果它讓你感到困惑 服務器看到Qt的客戶,甚至得到一些數據,但我無法從Java服務器 – Dmitry

+0

Qt的客戶端上的任何迴應。在這種情況下,如何處理這一行的了:' url.port(6666);' – MrEricSir

回答

0

正確的代碼任何迴應Qt的客戶是這樣的:

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); 

}

,並得到迴應聲明和實現以下插槽

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


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

}

對於服務器端我用的HttpServer,這是在JDK