4

我有一个 serversocket 在我的服务器的一个端口说 7761 上运行,ip 说 10.2.110.43 现在有许多客户端在不同的服务器上运行,等待端口 7761 上的连接,并将 ascii 格式的数据写入该端口。

我希望服务器套接字验证客户端 IP 地址,然后接受来自客户端的连接。

有没有办法做到这一点?

4

3 回答 3

5

我们在下面的代码中看到,我们无法之前 accept()和之后检查对应方的地址:

Socket client = serverSocket.accept()
if( acceptedClients.contains( client.getInetAddress()) {
   ...
}
else {
   client.close();
}

具有acceptedClients众所周知的 InetAddress 的集合。

于 2012-10-25T06:07:11.657 回答
5

如果您不介意在 a 下运行SecurityManager并且 IP 地址列表是静态的,您可以通过security.policy文件完成此操作。只需将 SocketPermission 授予"accept"您想要接受连接的那些 IP 地址。但是,按照其他答案中的建议在代码或防火墙中执行此操作可能更可取。

于 2012-10-25T06:27:27.970 回答
3

如果您不希望连接到达您的 Java ServerSocket#accept(),除非它来自特定 IP,您必须配置防火墙来执行此操作。

建立连接后,您始终可以验证 IP 地址,如果不是来自正确的 IP,则立即关闭它。

于 2012-10-25T06:09:16.533 回答