Java 仅接受来自我的应用程序的连接

Java 仅接受来自我的应用程序的连接,java,sockets,Java,Sockets,我正在从事一个java项目,其中有一个服务器和一个客户端应用程序。服务器接受连接并通过套接字编程将请求的数据发送到客户端 一切正常,但当上传并在服务器上工作时,我从未知ip获得连接。该应用程序将在许多国家使用,因此不会有特定的ip进入白名单 是否有办法禁止/拒绝这些ip,以便服务器使用套接字只接受来自我的应用程序的连接。在请求与服务器的连接时,是否可以发送自定义数据,以便服务器只接受这些连接。接受入站连接后,您可以在返回的套接字上使用Socket.getInetAddress()来检索并随后验证

我正在从事一个java项目,其中有一个服务器和一个客户端应用程序。服务器接受连接并通过套接字编程将请求的数据发送到客户端

一切正常,但当上传并在服务器上工作时,我从未知ip获得连接。该应用程序将在许多国家使用,因此不会有特定的ip进入白名单


是否有办法禁止/拒绝这些ip,以便服务器使用套接字只接受来自我的应用程序的连接。在请求与服务器的连接时,是否可以发送自定义数据,以便服务器只接受这些连接。

接受入站连接后,您可以在返回的套接字上使用
Socket.getInetAddress()
来检索并随后验证IP

如果不允许IP,则使用
Socket.close()
关闭不需要的连接

编辑:
当然,验证的基础不仅仅是IP。一旦连接打开,您就可以使用其流传输任意数据以识别客户端,例如在身份验证失败后关闭连接

这样做,你应该考虑有人能够拦截你的通信的可能性。换句话说,使用安全连接是有意义的


我不知道如何在打开(接受)连接之前用Java对客户端进行身份验证。

您所描述的选择性接受属于本文的范围。您需要将客户端连接到:

  • 向您标识他们自己,以便您可以确定是否允许他们访问服务器。这可以通过多种方式实现,如IP或MAC地址白名单,或其他自定义身份验证方案
  • 一旦允许访问,您就可以通过授权规则进一步确定连接客户端在系统中可以做什么

  • 我建议您看看这样的库,它将为您带来一些繁重的工作。

    如果您的服务器和客户端需要验证,您也应该考虑使用证书

    以下是更多信息:


    jarkko我们的客户在世界各地都有自己的客户。。。正如我已经提到的“这个应用程序将在许多国家使用,所以不会有像白名单上的特定ip那样的应用程序”。@Spicyjazz我过于简单化了。我已经用扩展的解释更新了答案。是的,到目前为止,我正在打开连接后验证我的应用程序。。我正在试图找出如何在发出请求时进行身份验证,以避免不必要的连接..是否可以在jwebbrowser位置栏中设置自定义文本而不是页面url。。。是否有可能替换jwebbrowser列表框的位置栏来存储以前输入的url'swell@Perception?我相信我的问题会通过shiro得到解决。。。让我试试看,让你知道……)谢谢