繁体   English   中英

Java TCP套接字:java.net.ConnectException:connect:本地计算机上的地址无效,或者端口在远程计算机上无效

[英]Java TCP socket: java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine

我正在使用socket = new Socket(host, port, InetAddress.getLocalHost(), clientPort);创建套接字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。

谁能请帮忙。 我正在使用eclipse。 这可能是防火墙问题吗?

谢谢

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

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

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

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

serverSocket = new ServerSocket(4444);

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

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

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

所有关于套接字

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM