2011-07-28 10 views
3

私は現在、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側のすべてのケースで切断を管理する必要がありますか?

ありがとうございました。リモートピアが明示的に(近い()またはシャットダウン()メソッドを使用して)、切断要求を送信しない限り、

答えて

4

TCPは、切断を通知しませんか、(切断ソケットへの書き込みをしようとした場合、あなたは、この問題を解決するための古典的な方法は、ハートビート非アクティブの一定量の後には、リモートピアが突然かが死亡したと結論づけたソケットをクローズハートビートメッセージングシステムを実装している)

壊れたパイプ信号を取得しますネtworkの問題。

+0

これは私が恐れるものです。 実装することをアドバイスするポーリングシステムの一種ですか?つまり、ソケットやパイプの状態をテストする定期的なタイマーですか?イベントやシグナルに基づいた解決策があることを期待しましたが、私は自分の考えを確認します。 ありがとうございます。 –

関連する問題