私は現在、qtサーバとJavaクライアントの間で少しのネットワーク通信をしようとしています。Qtサーバ/ Javaクライアント通信の問題
私の例では、クライアントはサーバーにイメージを送信します。私の問題は今では、サーバーはデータを見ることがないので、bytesAvailable()は0を返します。
QDataStream、QTextStream、readAll()はすでにデータを試しています。
サーバー:
QTcpServer* tcpServer;
QTcpSocket* client;
tcpServer = new QTcpServer();
if(!tcpServer->listen(QHostAddress::Any, 7005)){
tcpServer->close();
return;
}
...
tcpServer->waitforNewConnection();
client = tcpServer->nextPendingConnection();
client->waitForConencted();
while(client->state()==connected){
// Syntax here might be iffy, did it from my phone
if(client->bytesAvailable()>0){
//do stuff here, but the program doesnt get here, since bytesAvailable returns 0;
}
}
クライアント:
public SendPackage() {
try {
socket = new Socket(ServerIP, Port);
socket.setSoTimeout(60000);
output = new BufferedOutputStream(socket.getOutputStream());
outwriter = new OutputStreamWriter(output);
} catch (ConnectException e) {
System.out.println("Server error, no connection established.");
} catch (Exception e) {
e.printStackTrace();
}
}
public void Send(BufferedImage img) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, GUI.imageType, baos);
baos.flush();
byte[] imgbyte = baos.toByteArray();
System.out.println(imgbyte.length);
System.out.println("sending");
outwriter.write(imgbyte.length);
outwriter.flush();
// here i'd send the image, if i had a connection ...
output.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
接続し、すべてが、送信しようとしたときにソケットが切断されたときのコードも私に伝え、罰金を構築しますだから私は接続が問題ではないと思う。 私はちょうどQtを使用し始めました。なぜあなたがこれがうまくいかないか考えていたら、私はそれを試して喜んでいます。
実際には、while(connected)ループを読み込もうとしています。私はそれに言及するのを忘れていた。 – Kijata
であり、サーバーは実際のアプリケーションの背後にある別のスレッドで実行されているため、タイミングは問題にはなりません。 – Kijata
さて、あなたは 'QIDevice :: readyRead'を考慮する必要はありません。しかし、私の応答はまだ有効です - 私はあなたがデータをすぐに取得しようとしていると思います。 'waitForReadyRead'を追加するだけで、何らかのデータが表示されるはずです。 – michalsrb