私は現在、TCPを介してサーバーに接続するAndroidアプリケーションを開発中です。サーバはQtで書かれ、コンピュータ上で動作します。QTcpSocketのライフタイム
サーバー側では、QTcpServer
と信号QTcpServer::newConnection()
を使用して、QTcpSocket
に新たにQTcpServer::nextPendingConnection()
を接続します。私はこのソケットで受信したデータを管理するSocketManager
というクラスを実装しました。
Android側では、javaソケットを使用してサーバーに接続します。
すべて素晴らしいです。 Android側がサーバーとの接続を切断すると、私のSocketManager
オブジェクトは正常に通知され、自身を破棄します。しかし、私は、例えば、Androidデバイスがオフラインになったり、オフになったりするケースを適切に管理したいと考えています。その場合、Androidの切断については通知されません。私は私のQTcpSocket
のこれらの信号を接続します
QAbstractSocket::disconnected()
、QAbstractSocket::stateChanged(QAbstractSocket::SocketState)
QAbstractSocket::error(QAbstractSocket::SocketError)
QObject::destroyed(QObject*)
、おそらくQTcpSocketが内部QTcpServerによって破壊されていることを考えます。
Android搭載端末がオフラインになったりオフになったりすると、信号が受信されません。
QTcpSocketがQTcpServer
によってリリースされる予定ですか?ソケットが明示的に切断されている場合のみ?それで私の場合、決して破壊されませんか? Android側のすべてのケースで切断を管理する必要がありますか?
ありがとうございました。リモートピアが明示的に(近い()またはシャットダウン()メソッドを使用して)、切断要求を送信しない限り、
これは私が恐れるものです。 実装することをアドバイスするポーリングシステムの一種ですか?つまり、ソケットやパイプの状態をテストする定期的なタイマーですか?イベントやシグナルに基づいた解決策があることを期待しましたが、私は自分の考えを確認します。 ありがとうございます。 –