在iOS上调用TcpListener.Start()时,如何避免Access Denied错误?

And*_*son 5 c# sockets mono ios

在我的iOS应用程序中,我试图调用一个TcpListener实例.我定义并启动监听器如下:

var listener = new TcpListener(IPAddress.Any, 104);
listener.Start();
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码(iOS模拟器,iPhone,调试模式)时,我得到以下异常:

System.Net.Sockets.SocketException:在/Developer/MonoTouch/Source/mono/mcs/class/System/System.Net中的System.Net.Sockets.Socket.Bind(System.Net.EndPoint local_end)[0x00051]拒绝访问/Sveloper/MonoTouch/Source/mono/mcs/class/System/System.Net.Sockets/TcpListener.cs中的System.SNet.Sockets.TcpListener.Start(Int32 backlog)[0x00022]中的.Sockets/Socket.cs:1111 :259 at /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net.Sockets/TcpListener.cs:239 at
...的System.Net.Sockets.TcpListener.Start()[0x00000]

有什么我可以做的,以避免访问被拒绝错误,或者这是Xamarin.iOS上的Mono运行时的内置限制?

Pet*_*esh 6

您无法绑定到端口< 1024没有管理权限.1024为此,请使用端口> = .这是一般限制 - 如果在大多数操作系统中作为普通用户运行,您将在任何应用程序上遇到相同的问题.

这在DICOM维基百科页面中有说明,它提供了端口列表:

DICOM已通过Internet Assigned Numbers Authority(IANA)保留以下TCP和UDP端口号:

  • 104DICOM通过传输控制协议(TCP)或用户数据报协议(UDP)的众所周知的端口.由于104位于保留子集中,因此许多操作系统需要特殊权限才能使用它.
  • 2761 通过TCP或UDP使用集成安全通信层(ISCL)的DICOM注册端口
  • 2762 使用TCP或UDP上的传输层安全性(TLS)为DICOM注册的端口
  • 11112 DICOM的注册端口,使用TCP或UDP上的标准,开放式通信

标准建议但不要求使用这些端口号.

(来自维基百科的页面,强调我的)