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