如何仅在Java中接受来自本地网络的连接

时间:2017-10-31 08:37:36

标签: java network-programming

我有一个使用accept方法监听的ServerSocket对象。我如何接受仅来自同一网络而非外部的连接?

2 个答案:

答案 0 :(得分:0)

通过接受本地IP地址的构造函数创建<div class="check-box"><input type="checkbox" data-name="4' Tarps" name="chkSP" id="chkSP7" value="7"><label id="lblOut7" for="chkSP7" value="7">4' Tarps</label></div> <div class="check-box"><input type="checkbox" data-name="TWIC Card" name="chkSP" id="chkSP8" value="8"><label id="lblOut8" for="chkSP8" value="8">TWIC Card</label></div> var SP="TWIC Card" ; var SPArray = SP.split(','); var allSelectedSP = ""; for (var i = 0; i < SPArray.length; i++) { Array.from(document.querySelectorAll("input[data-name='" + SPArray[i].trim() + "']")).forEach(function (input) { input.checked = true; }); allSelectedSP += ", " + $.trim(SPArray[i]); } ,并提供ServerSocket作为该IP地址。

答案 1 :(得分:0)

如果您的系统有多个网络接口且其中一个接收本地连接而其他网络接口应被忽略,则可以设置一个ServerSocket,其中包含netork接口的IP地址,仅将其绑定到特殊界面:

ServerSocket ssocket = new ServerSocket(1234, 10, InetAddress.getByAddress("192.168.1.1"));

使用IPv4和IPv6,显然需要两个ServerSockets。

如果从同一网络接口收到本地和远程连接,则必须自己检查远程对等方。这可以通过不同的方式完成:

  • 如果连接尝试来自错误的地方,您可以设置实现SecurityManager的{​​{1}}并抛出checkAccept。这是一个全局设置,因此您无法在应用程序的其他部分设置SecurityException来接受来自那里的连接。
  • 您可以检查从ServerSocket返回的Socket的IP和端口是否为本地,如果不是,则关闭套接字而不是继续请求
  • 您可以创建ServerSocket的子类,覆盖调用ServerSocket的方法checkAccept,按照选项2中的说明执行相应的检查,只返回检索到的连接(如果它适合您的标准或以其他方式关闭它并再次调用超级方法。