【发布时间】:2013-10-29 08:41:57
【问题描述】:
在我的 iOS 应用程序中,我试图调用 TcpListener 实例。我定义和启动监听器如下:
var listener = new TcpListener(IPAddress.Any, 104);
listener.Start();
但是,当我运行此代码(iOS 模拟器、iPhone、调试模式)时出现以下异常:
System.Net.Sockets.SocketException:访问被拒绝 在 System.Net.Sockets.Socket.Bind (System.Net.EndPoint local_end) [0x00051] 在 /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net.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 运行时的内置限制?
【问题讨论】:
-
如果没有管理员权限,您无法绑定到 1024 的端口。这是一般限制——如果以普通用户身份运行,您会在 Windows 上遇到同样的问题。这在 DICOM 的维基百科页面中有说明
-
谢谢,@Petesh。我已尝试使用端口 > 1024,但收到相同的错误消息。
-
现阶段,我不知道。在 iOS 上绑定到 INADDR_ANY 适用于本机应用程序。使用端口 104 是我在您的代码中看到的最大危险信号
-
好的,很高兴知道。您知道启用 TCP 侦听是否需要任何配置?我在 Xamarin Studio iOS 项目设置中找不到任何特定内容,但可能有一些必需的自定义命令或?
-
您可能需要使用
netstat -ln | grep <port>来检查您选择的新端口是否尚未使用。