Java - 异步套接字通道无法连接到远程异步服务器套接字通道
Posted
技术标签:
【中文标题】Java - 异步套接字通道无法连接到远程异步服务器套接字通道【英文标题】:Java - async socket channel cannot connect to remote async server socket channel 【发布时间】:2020-07-30 11:09:15 【问题描述】:我创建并调试了一个使用AsynchronousSocketChannel
和AsynchronousServerSocketChannel
的简单网络应用程序,当通过localhost
访问它们时它们工作正常,但即使我将服务器应用程序移动到另一个设备,它也完全拒绝连接。当我尝试端口转发应用程序时,我首先注意到了这一点,但是在将其移动到同一网络上的设备上并通过 IPv4 连接时,它仍然无法正常工作。我检查了两个设备,它们都允许 Java 通过防火墙,并且没有任何东西阻止我正在使用的端口号(我还测试了其他各种端口)。如果客户端在同一台机器上并且您使用该机器的 IPv4,则客户端甚至无法连接到服务器。它实际上只适用于localhost
。有没有其他人遇到过这个问题?
服务器通道是这样打开的:
serverSocket = AsynchronousServerSocketChannel.open();
serverSocket.bind(new InetSocketAddress("127.0.0.1", port));
【问题讨论】:
【参考方案1】:通过删除InetSocketAddress
的 IP 部分来修复它:
serverSocket = AsynchronousServerSocketChannel.open();
serverSocket.bind(new InetSocketAddress(port));
用机器的IPv4替换127.0.0.1
也有同样的效果。如果有人能解释这一点,那就太好了,因为我在网上看到的每个示例都绑定到localhost
。 AsynchronousServerSocketChannel
s 不应该被远程访问吗?
【讨论】:
服务器的整个概念是由客户端远程访问。为什么要显式绑定到127.0.0.1
或IPv4 地址?您的设备有哪些网络接口没有运行?
在网上的例子中,我看到它们绑定到127.0.0.1
,所以我认为你应该这样做。
但是当这不起作用时,你完全迷失了。所以假设事情有点危险。我问是因为this。
嗯,这似乎是有道理的,每个网站都在这样做,所以没有什么可做的了。我找不到指定打开服务器套接字通道的正确方法的 Oracle 文档。以上是关于Java - 异步套接字通道无法连接到远程异步服务器套接字通道的主要内容,如果未能解决你的问题,请参考以下文章