2011-12-02 53 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项目,因为我发现它确实有效。

享受!