سؤال

أحاول الوصول إلى 61616 في تطبيق iPhone الخاص بي ويشير رمز التخلص إلى أن لدي شبكة صالحة، لكنني أحاول أن أحاول الكتابة إلى 61616. هل يعرف أحد:

أ. إذا كانت شبكة iPhone Edge / 3G تحتوي على نطاق منفذ محدود أو لا يسمح بالاتصال بهذا المنفذ؟

ب. كيف يمكنني التحقق صراحة للوصول إلى هذا المنفذ. هنا هو رمز "قابل الوصول إلى الشبكة" (المقترض من أمثلة Apple)، والذي يتحقق من "foo.bar.com" ولكن لا يظهر كيفية التحقق من "foo.bar.com:61616".

أي مساعدة موضع تقدير!

- (BOOL)isDataSourceAvailable{
static BOOL checkNetwork = YES;
BOOL _isDataSourceAvailable = NO;
if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
    checkNetwork = NO;

    Boolean success;    
    const char *host_name = "foo.bar.com";

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
    SCNetworkReachabilityFlags flags;
    success = SCNetworkReachabilityGetFlags(reachability, &flags);
    _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
    CFRelease(reachability);
}
return _isDataSourceAvailable;

}

هل كانت مفيدة؟

المحلول

يقوم API Scnetworkreach بإصلاحها فقط يتحقق فقط مما إذا كان يمكن توجيه العنوان إليه. نقلا عن الوثائق:

تعكس "Reachabilability" ما إذا كانت حزمة بيانات، أرسلها تطبيق في كومة الشبكة، يمكن أن تترك الكمبيوتر المحلي. لاحظ أن الوصول إلى عدم ضمان أن يتم استلام حزمة البيانات في الواقع من قبل المضيف.

هذا لا علاقة له بفرض قيود NAT أو المنفذ. يعتمد التوجيه على العناوين - وليس على المنافذ. لذلك كل ما يمكنك معرفة ذلك (عبر ScnetworkreaCriew API) هو ما إذا كان يمكنك (من الناحية النظرية) الوصول إلى واجهة الجهاز. لا يحاول إنشاء اتصال على منفذ معين.

لذلك من أجل معرفة ما إذا كان هذا الخدمة يمكن الوصول إليه، سيتعين عليك تجربة واختبار نفسك. ويفضل أن تخبرك برامج API الخاصة ب Scnetworkreach بإصلاحها أنه يمكن إنشاء اتصال. فقط حاول الاتصال بالخادم على المنفذ 61616 ومعرفة ما إذا كنت تحصل على اتصال أو مهلة. القيم المهلة المناسبة والمناولة أمر حاسم هنا.

نصائح أخرى

هذا شيء يختلف كثيرا من الناقل فقط للناقل ولكن من العقد إلى العقد. على سبيل المثال، هنا في المملكة المتحدة O2 تقييد الوصول إلى الإنترنت فقط إلى عناوين الويب فقط (من المفترض المنافذ 80 و 443 ولكن لم أكن راجعا) لعملاء الدفع كما تذهب لكنهم يسمحون بالوصول المجاني أكثر أو أقل للأشخاص على عقد. (آمل أن تكون أكثر انفتاحا قليلا لعملاء iPhone Payg.)

أعتقد أن الانفعال العملي لهذا هو أنه لا يمكنك تحمل الوصول إلى المنافذ العالية في كل مكان في العالم.

لست متأكدا من وجود طريقة بسيطة للتحقق من فتح منفذ معين، وربما يكون خيارك الأفضل هو استخدام مهلة "معقولة". بالطبع، هناك عدد من الأسباب التي قد تحصل عليها المهلة حتى يتعين على الخطأ أن تكون غامضة مناسبة.

إذا كان جهاز iPhone متصل فوق الحافة / الجوال، فقد يكون ذلك وراء بوابة NAT وبالتالي لا يمكنك الاتصال به. على الأقل هذا هو الحال مع T-Mobile ألمانيا. يحصل iPhone على عنوان IP الخاص ب RFC بواسطة T-Mobile (172.16.xx).

وأود أن اختبره مع iPhone متصل بشبكة WiFi المحلية الخاصة بك و - إن أمكن - تصميم التطبيق بشكل عام بطريقة توصيل iPhone خادم خادم ثم يمكن للخادم التواصل مع الهاتف.

هل تحاول الاتصال بجهاز iPhone الخاص بك من جهاز خارجي؟

من المرجح أن لا يعمل. عادة كتل البنية التحتية GPRS / EDGE / UMTS الاتصالات الواردة. وإلا يمكن فواتير المشترك عبر الهاتف المحمول لحركة المرور غير المرغوب فيها التي لم يطلبها. (تخيل أن شخصا ما يلزف اي فون الخاص بك مرة واحدة في الثانية في الأسابيع الستة المقبلة. ستدفع ثمن ذلك ...)

الحل هو إنشاء اتصال من الجهاز المحمول إلى الجهاز البعيد ثم السماح للآلة عن بعد باستخدام حركة المرور.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top