2011-12-02 52 views
0

我想知道爲什麼一些monotouch功能在模擬器中運行良好,但在真實設備上失敗? 相同的Ping類。它從模擬器完美工作,但在設備上失敗。有什麼不同?有沒有辦法讓它在設備上工作?ping在單點觸摸

更多了,我發現這篇文章對如何在Mac OS中實現平: http://developer.apple.com/library/mac/#samplecode/SimplePing/Listings/SimplePing_m.html#//apple_ref/doc/uid/DTS10000716-SimplePing_m-DontLinkElementID_5

纔有可能到港口此代碼的MonoTouch?說實話,我還沒有嘗試過,如果它在iOS上工作,但我沒有看到任何東西,爲什麼它不會在那裏工作。

PS。我知道Reachability類,是的,我在我的項目中使用它而不是ping!

回答

4

這是最有可能是什麼的iOS允許你這樣做的問題。

Here是從一個人誰試圖使用原始套接字實現ping和跑進iOS的限制。

The original bugreport指出:「執行ping操作需要linux內核功能(capget)或設備上不存在的ping二進制文件。」換句話說:根訪問。

Here是一個解決辦法,但它不是一個ping實現。

這就是說,它看起來就像是somebody tried to port到iOS的SimplePing示例成功,所以也許終究有可能 - 但它並不是優先考慮它(Reachability類畢竟是可用的)。

1

我想知道爲什麼一些monotouch功能在模擬器中運行良好,但在真實設備上失敗?

MonoTouch的詢問操作系統,例如在這種情況下,網絡棧,以進行競標。 iOS模擬器和設備之間允許操作系統不同(並且),並且在運行時的行爲也不同。

的區別是什麼?

只是爲了重新執行幫主,蘋果SDK提供的是iOS模擬器模擬器。它甚至不嘗試模擬設備的大部分限制。例如。它:

  • 執行x86代碼,而不是ARM代碼(如Android模擬器將要求);

  • 允許JIT'ing(這是很好的,因爲它允許MonoTouch的建立非常快的模擬器下調試)。這是不允許的(甚至可能)在設備上,我們必須使用AOT編譯;

  • 提供對文件系統的完全訪問權限(與當前用戶可以讀取的一樣多);

  • 不提供模擬支持某些特定的設備功能(例如,加速度計);

  • 不勝枚舉...

有的分歧是巨大的(它比運行ARM代碼將是一個仿真器快得多),而其他人可以是相當限制(如缺乏支持硬件功能)在某些情況下。

+0

好奇:你有沒有想過在設備上使用JIT而不是AOT進行調試版本?它不會讓每個人都過得更輕鬆嗎? – Krumelur

3

SimplePing for MonoTouch現在可以在這裏找到。

https://github.com/theonlylawislove/MonoTouch.SimplePing

簡單的附加這個混帳回購作爲一個子模塊到您的項目,然後選擇「添加現有項目」,並增加了「MonoTouch.SimplePing」到您的項目。有一個小的幫助器類可以使「SimplePingHelper」的「MonoTouch.SimplePing.Test」項目變得更容易一些。

然後使用下面的代碼。

SimplePingHelper.Ping (
    "192.168.5.77", 
    1000, 
    () => { 
     NSThread.MainThread.BeginInvokeOnMainThread (new NSAction (() => { 
      var alertView = new UIAlertView ("Response", "Success", null, null, new string[] { "Ok" }); 
      alertView.Show(); 
     })); 
    }, 
    () => { 
     NSThread.MainThread.BeginInvokeOnMainThread (new NSAction (() => { 
      var alertView = new UIAlertView ("Response", "Failure", null, null, new string[] { "Ok" }); 
      alertView.Show(); 
     })); 
    }); 

該解決方案適用於模擬器和我測試的每個設備。

不要使用任何在互聯網上發現的「RawSocket」黑客攻擊。它充斥着異步代碼的錯誤,並且它在某些設備上工作而不是其他設備上的問題。把我的頭髮拉出來後,我想我會移植SimplePing項目,因爲我發現它確實有效。

享受!