我的服务器上运行了一个服务器插槽,如我的服务器中的7761,ip说10.2.110.43 现在有许多客户端在不同的服务器上运行,等待端口7761上的连接,并以ascii格式将数据写入该端口。
我希望serversocket验证client-ipadress,然后接受来自客户端的连接。
有办法吗?
答案 0 :(得分:5)
如果您不介意在SecurityManager
下运行并且IP地址列表是静态的,您可以通过security.policy
文件完成此操作。只需将SocketPermission "accept"
仅授予您希望接受连接的IP地址。但是,在其他答案中建议的代码或防火墙中执行此操作可能更可取。
答案 1 :(得分:4)
我们在以下代码中看到,我们无法在 accept()
之前检查对方的地址,但在之后
Socket client = serverSocket.accept()
if( acceptedClients.contains( client.getInetAddress()) {
...
}
else {
client.close();
}
使用acceptedClients
众所周知的InetAddress集合。
答案 2 :(得分:3)
如果您不希望连接到达Java ServerSocket#accept()
,除非它来自特定IP,您必须配置防火墙才能执行此操作。
您可以在建立连接后始终验证IP地址,如果不是来自正确的IP,则立即关闭IP地址。