如何创建仅限localhost的Java套接字?

时间:2010-02-05 04:35:29

标签: java networking sockets

我有一个Java服务器,它使用ServerSocket打开一个套接字(使用Thrift)。该服务器在Obj-c中的本地机器上有一个客户端,它与Java服务器通信。一切都发生在localhost上。现在java服务器在网络上也是可见的,我希望java服务器只能在localhost上访问。否则,这是一个潜在的安全漏洞,当防火墙警告用户时,它会吓跑用户。

我尝试使用InetSocketAddress('localhost',9090)创建服务器套接字,但这似乎没有任何效果。我怎样才能将这个东西限制在localhost?

4 个答案:

答案 0 :(得分:40)

Taken from another question:

new ServerSocket(9090, 0, InetAddress.getByName(null));

InetAddress.getByName(null)指向环回地址(127.0.0.1)

here's Javadoc所说的那样

答案 1 :(得分:21)

尝试

new ServerSocket(9090, 0, InetAddress.getByName("localhost"))

构造函数的最后一个参数指定将侦听套接字绑定到哪个地址。

答案 2 :(得分:18)

让我使用另一种只接受环回设备的解决方案。所有其他“localhost”解决方案将使Java选择一个接口。

new ServerSocket(9090, 0, InetAddress.getLoopbackAddress());

这是从Java 7开始提供的,甚至不会抛出UnknownHostException

答案 3 :(得分:3)

new ServerSocket(9090, 0, InetAddress.getByName(null));