1

as3 サーバーソケットがあり、Java ソケット (Android アプリ) を介してこのサーバーソケットに接続しています。問題は、serversocket アプリケーションが強制的に閉じられたときに、リモート ソケットが閉じられているか到達不能であることを理解する方法を見つけることができなかったことです。この問題を別の方法で解決したいのは、サーバー アプリケーションを接続チェック メッセージで忙しくさせないためですか?

4

4 に答える 4

2

TCPが接続が閉じられたことを理解する方法は3つあります。

  1. 一方の側でエラーが発生しました-もう一方の側にリセット要求を送信して接続を閉じます
  2. 一方の側は実際に接続を閉じたいので、もう一方の側にFINメッセージを送信します
  3. ある側から別の側に何かを送信しようとしたときのタイムアウト。このタイムアウトは、tcpパッケージが送信された場合にのみ発生する可能性があります。接続が確立された後、tcpのパッケージは、データ送信要求(および接続終了要求...)でのみ送信されます。

したがって、データ送信の途中ではなく、一方の側が突然切断された場合、切断を見つける方法はありませんが、たまにパッケージを送信する必要があります。

于 2012-09-08T09:13:14.163 に答える
2

TCP 接続は、川のような連続的な流れではありません。これは、個別の時間に送信される一連のセグメントです。つまり、道路を走る車に似ています。そのため、車が反対側の端に到達しようとして失敗し、折り返し電話をかけるまで、道路が壊れていることを通知する方法はありません。

適切な間隔 (30 秒?) で車を送信し続け、サーバーが NOOP メッセージ (No Operation の略) を受信したときに何もしないように指示する必要があります。クライアントは、接続がアイドル状態 (30 秒間メッセージが送受信されない) のときに NOOP の送信を開始するようにプログラムされます。ドライバーが宛先に到達できないことをコールバックすると、現在のソケットを閉じて別のソケットを作成しようとします。 1。

于 2012-09-08T10:28:52.190 に答える
1

あなたができることは、サーバーにI am aliveメッセージを 5/10 分ごとにブロードキャストさせることです :)

于 2012-09-08T09:23:50.420 に答える
1

あなたは唯一の方法を見つけました。TCP は、接続を使用しようとする以外に、接続の状態を確認する方法を提供しません。これをよりインテリジェントに使用できます。たとえば、自分自身にハートビート メッセージなどを送信できます。しかし、教えてくれるAPIはありません。

于 2012-09-08T08:10:29.523 に答える