3

我正在使用创建套接字socket = new Socket(host, port, InetAddress.getLocalHost(), clientPort);。我希望套接字在客户端侦听特定端口。但是当我使用InetAddress.getLocalHost()我得到java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine.

但是当我使用它时,InetAddress.getByName("localhost")它工作正常。但我需要服务器端机器的 IP 地址。所以当我使用时,socket.getInetAddress()我想要 ipadress 而不是 127.0.0.1。

任何人都可以请帮忙。我正在使用日食。这可能是防火墙问题吗?

谢谢

4

2 回答 2

1

您正在使用构造函数的四参数形式Socket(真的很不寻常;只使用两个参数形式并让操作系统自己找出本地地址是正常的),因此您需要确保与关联的两个地址套接字是兼容的,即可以以这种方式路由数据包。特别是,如果任一端是 localhost,则另一端也必须如此,因为该地址仅通过环回网络接口路由。

对您来说(在客户端)最简单的解决方法是切换到使用两个参数的构造函数,让操作系统为您找出其余部分;它做得很好。(如果服务器依赖于来自特定端口号的客户端连接,那就太糟糕了,而且非常脆弱。)

于 2011-11-20T08:49:55.133 回答
0

听起来像是对客户端和服务器端职责的混淆 - 听起来您正试图让两个 Java 应用程序使用 Java 套接字通过 TCP/IP 在同一主机上相互通信。

如果是这种情况,您首先需要在“服务器”应用程序中使用 ServerSocket 在所有接口上创建监听套接字:

serverSocket = new ServerSocket(4444);

然后,您应该能够通过使用 Socket 连接到 localhost 来从“客户端”应用程序连接到 ServerSocket:

clientSocket = new Socket("localhost", 4444);

以下页面看起来像是详细介绍了这一点:

所有关于套接字

希望有帮助。

于 2011-11-20T08:32:57.823 回答