端口1
-1024
默认情况下,需要管理访问权限。否则,您会收到错误代码 5 ( ACCESS_DENIED
)。如果您尝试绑定到1024以上的端口,例如:
http://localhost:8080/
它适用于非管理员用户。在您的情况下,您尝试侦听 port 80
, HttpServer API 限制为管理员。
Windows 中的一切都由访问控制列表 (ACL) 控制;这包括使用 HttpServer 时允许的侦听端口。您可以通过运行以下命令显示 http 使用的当前 ACL:
>netsh http show urlacl
如果您这样做,您将看到许多已由各种系统定义的 ACL。
Windows 通信基础
一个 ACL 条目特别有趣:
Reserved URL : http://+:80/Temporary_Listen_Addresses/
User: \Everyone
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;WD)
每个人都被授予监听端口的权利80
,只要你住在:
/Temporary_Listen_Addresses/
此 url 由 Windows Communication Foundation (WCF) 使用,它通常构造以下形式的 URL:
http://+:80/Temporary_Listen_Addresses/{random-guid}/
这也意味着,如果你真的想要 80 端口,你可以用你自己的监听,例如:
http://localhost:80/Temporary_Listen_Addresses/64E3DCC6-FE47-4A86-87F4-48D2E1B44AE9/
只要没有人使用 80 端口(我在看你的 Skype!),你就会明白。
WinSock 监听套接字不需要管理员
虽然 HttpServer API 具有控制对以下端口的访问的 ACL 1024
,但应注意 WinSock API 没有限制。
如果你想使用 WinSock 在 port 上打开一个监听套接字80
,你不需要是管理员。只有Http
api 具有 ACL。