unity C# での質問です
サーバにTCP/IPで接続する際に同期接続を行った場合、サーバ側が落ちていた時に接続失敗になるまで時間がかかるので、非同期接続でタイムアウトを取りたいのですがうまく行きません。
ネットでの記事を参考にこんなソースを書いて、このクラスでチェックし、応答が取れたら同期接続をするというロジックでやっています。
このロジックですと、サーバ側PCもクライアントとなるスマホも同じローカルネットワークならうまくいくのですが、スマホが公衆回線の場合はサーバを落としていても iar.IsCompleted が true になって、つながったと判断してしまいます。
良い方法、あるいは、根本的にアプローチが間違えている、など、ご指導頂けましたら幸いです。
よろしくお願いします。
C#
1 2using UnityEngine; 3using System; 4using System.Collections; 5using System.Net.Sockets; 6 7public class TCPcheck : MonoBehaviour 8{ 9 10 // 接続OK 11 public bool blConnectFlg = false; 12 13 // TCPクラス 14 private TcpClient tc = null; 15 16 // TCP/IP 接続チェック (非同期) 17 public IEnumerator Connect(string host, int portNo, int timeoutMSec) 18 { 19 20 // 接続OKフラグ 21 blConnectFlg = false; 22 23 // TCPクラス定義 24 TcpClient tc = new TcpClient(); 25 26 // 開始時刻 確保 27 float startTime = Time.time; // 開始時間 28 29 // 接続 30 IAsyncResult iar = tc.BeginConnect(host, portNo, null, null); 31 32 // 接続終了待ち 33 while (iar.IsCompleted == false && (Time.time - startTime) < 10 ) 34 { 35 36 yield return 0; 37 38 } 39 40 // 接続できた場合 41 if (iar.IsCompleted == true) 42 { 43 44 // 接続フラグを立てる 45 blConnectFlg = true; 46 47 // 終了 48 tc.Close(); 49 50 } 51 52 // 破棄 53 iar = null; 54 55 // 終了 56 yield break; 57 58 } 59 60}

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/26 23:58
2016/05/27 00:31 編集
2016/05/27 00:44
2016/05/27 00:59