2017-03-08 17 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