【发布时间】:2017-10-31 08:37:35
【问题描述】:
我有一个 ServerSocket 对象,它正在使用接受方法进行侦听。如何接受仅来自同一网络而不是外部的连接?
【问题讨论】:
我有一个 ServerSocket 对象,它正在使用接受方法进行侦听。如何接受仅来自同一网络而不是外部的连接?
【问题讨论】:
如果您的系统有多个网络接口,其中一个仅接收本地连接而其他应被忽略,您可以使用 netork 接口的 IP 地址设置 ServerSocket 以将其仅绑定到该特定接口:
ServerSocket ssocket = new ServerSocket(1234, 10, InetAddress.getByAddress("192.168.1.1"));
对于 IPv4 和 IPv6,您显然需要两个 ServerSocket。
如果从同一个网络接口接收到本地和远程连接,您必须自己检查远程对等点。这可以通过不同的方式完成:
checkAccept 的SecurityManager,如果连接尝试来自错误的位置,则抛出SecurityException。这是一个全局设置,因此您无法在应用程序的其他应该接受来自那里的连接的部分设置ServerSocket。ServerSocket 返回的Socket 的IP 和端口是否是本地的,如果不是则关闭套接字而不是继续请求ServerSocket 的子类,覆盖方法checkAccept 其中调用super.accept,按照选项2 中所述执行相应检查,并且仅在符合您的条件时返回检索到的连接或以其他方式关闭它并且再次调用超级方法。【讨论】:
通过接受本地 IP 地址的构造函数创建 ServerSocket,并提供 127.0.0.1 作为该 IP 地址。
【讨论】:
localhost的连接