java上的服务器无法从Qt客户端获取消息

时间:2017-03-08 17:58:19

标签: java qt server client qnetworkaccessmanager

我有非常简单的java服务器:

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

我在插槽replyFinished中的mainwindow.h中声明了

public slots: 
void replyFinished(QNetworkReply* reply); 

在最好的情况下,Server会获得一些标题(POST / HTTP / 1.1 内容类型:application / x-www-form-urlencoded和其他)

但是在服务器上我无法从客户端读取我的消息 和客户端没有收到来自Java服务器的任何响应

1 个答案:

答案 0 :(得分: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中可用

相关问题