PC によって制御される産業プロセスのリモート コントロールとして Android デバイスを使用しています。
接続が予期せず切断されることがあります。バッテリーが切れる、Android デバイスが圏外になる、ネットワークの問題が発生する、ワイヤレス アクセス ポイントがリセットされる、Android が再起動するなどです。このような状況では、PC は切断されたことを「認識」しない可能性があります。 FINを取得しないためです。
したがって、Android 側で再起動し、ソケットを初期化するときに、
sock = new Socket(ipAddress, portNumber);
ネットワーク スニファー (Wireshark) では、Android が SYN を送信していることがわかります。しかし、PC は切断されたことを認識していないため、つまり、以前からまだ接続されていると考えているため、RST、ACK を送信します。これにより、Android Socket コンストラクターが null を返します。
私がする必要があるのは、SYN ではなく FIN を PC に送信することです。しかし、SYN はハンドシェイクの最初のパケットでなければならないと思いました (私はネットワークの専門家ではありません) 。または、代わりに、SYN で開始しないようにして、何も起こらなかったかのように接続を再利用し始めることができます。それを行う方法はありますか?Android 側からこのデッドロックを打破するにはどうすればよいですか? (私はPCが何をするかを制御できません)
前もって感謝します。