当前位置: 首页 > 面试题库 >

Socket.connect()到0.0.0.0:Windows vs.Mac

丁书
2023-03-14
问题内容

想象以下代码:

String hostName = "0.0.0.0";
int port = 10002;
int timeout = 5000;
Socket socket = new Socket();
socket.connect(new InetSocketAddress(hostName, port), timeout);

在Mac上,它可以正常工作并执行连接(即使端口10002上没有任何运行),在Windows上,我收到以下异常:

java.net.SocketException: Permission denied: connect

这有什么区别,在Windows上有什么替代方案?这在单元测试中使用。

问候

乔纳斯


问题答案:

以防万一有人偶然发现了这个问题,我正在回答。

不幸的是,在Windows上不允许连接到任何地址。

如Windows API文档中所述,Winsock函数 连接 将返回错误代码
WSAEADDRNOTAVAIL [ 远程地址不是有效地址(例如INADDR_ANY或in6addr_any) ]


如果由name参数指定的结构的地址成员用零填充,则connect将返回错误WSAEADDRNOTAVAIL。

因此,如果不使用任何本地主机地址,我认为您尝试执行的操作将无法在Windows上进行(尽管我想知道Unix的行为是错误还是故意的。)

我建议像Mark Reed在评论中建议的那样,设置更多的环回接口



 类似资料:
  • 用法同socket.open()

  • 我正在mac电脑上使用和。我发现将绑定到而不是。默认情况下,也将绑定到此地址。我仍然可以通过。但是对于,默认设置(例如0.0.0.0:4000)似乎需要访问Internet。没有Internet,我无法运行。它是一只小虫子吗? 我也使用流浪汉。我已设置端口转发(8080)= 有人能解释0.0.0.0、127.0.0.1和localhost?之间的区别吗?有人能解释为什么差异会导致这个问题吗?

  • 建议的解决方案之一是注意在端口80(netstat-ano)上运行的PID,将其关闭并启动Apache,这已经为许多其他人解决了问题。但对我来说,Apache本身运行在端口80上,当我启动服务时,我会得到套接字不可用错误。我试着把端口改成8080或其他,但没有运气。请告诉我我错在哪里? 准确错误消息: C:\Program Files(x86)\Apache Software Foundation

  • 问题内容: 我已经将我的Rails应用程序(本地开发机)迁移到Docker-Compose。除了Worker Rails实例(批处理)无法连接到Redis之外,其他所有组件都在工作。 在我的docker-compose.yml中 我认为Redis实例可通过Docker主机的IP获得。 通过0.0.0.0访问不起作用 我认为可以通过docker-machine IP访问: 编辑 在批处理实例中安装

  • 问题内容: 我正在学习angularJS书籍中的教程,并且必须设置服务器。这是server.js文件: 我收到此错误: 我已经知道,错误EACCES意味着我没有访问端口80的权限,但是我不知道如何解决此问题。任何帮助,不胜感激! 问题答案: 如果需要在端口80上运行服务器,则应使用反向代理(如nginx),该代理将在特权端口上使用系统帐户运行,并将请求代理到在非特权端口(> 1024)上运行的No

  • AH00558:Apache2:无法使用192.168.80.3可靠地确定服务器的完全限定域名。全局设置“ServerName”指令以禁止显示此消息站点(13)权限被拒绝:AH00072:MAKE_SOCK:无法绑定到地址0.0.0.0:80站点没有可用的侦听套接字,正在关闭站点AH00015:无法打开日志 DockerFile: