5

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

var listener = new TcpListener(IPAddress.Any, 104);
listener.Start();

但是,当我运行此代码(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] 拒绝访问.Sockets/Socket.cs:1111 在 System.Net.Sockets.TcpListener.Start (Int32 backlog) [0x00022] 在 /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net.Sockets/TcpListener.cs :259 在 System.Net.Sockets.TcpListener.Start () [0x00000] 在 /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net.Sockets/TcpListener.cs:239 在
...

我可以做些什么来避免Access denied错误,或者这是 Xamarin.iOS 上 Mono 运行时的内置限制?

4

1 回答 1

6

你不能绑定到端口 <1024没有管理权限。1024为此目的使用端口 >= 。这是一个普遍的限制——如果在大多数操作系统中以普通用户身份运行,您在任何应用程序上都会遇到同样的问题。

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

DICOM 已由 Internet 编号分配机构 (IANA) 保留以下 TCP 和 UDP 端口号:

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

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

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

于 2013-10-30T09:18:52.567 回答