我有一个客户机和服务器程序,尝试彼此通信。在服务器的策略文件中,我指定了以下内容:
grant signedBy "vivin" {
permission java.io.FilePermission "-", "read, write";
permission java.net.SocketPermission "localhost:2220-2230", "accept, connect, listen, resolve", signedBy "vivin";
};
在我的客户的政策文件中,我有:
grant signedBy "vivin" {
permission java.net.SocketPermission "localhost:2220-2230", "accept, connect, listen, resolve", signedBy "vivin";
};
我启动服务器,它监听2225端口。然后我启动我的客户机,它尝试连接到正在监听端口2225的服务器。不幸的是,我在服务器上得到了这个错误:
[java] Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:45944 accept,resolve)
[java] at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
[java] at java.security.AccessController.checkPermission(AccessController.java:546)
[java] at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
[java] at java.lang.SecurityManager.checkAccept(SecurityManager.java:1157)
[java] at java.net.ServerSocket.implAccept(ServerSocket.java:457)
[java] at java.net.ServerSocket.accept(ServerSocket.java:421)
端口号一直在变化;我假设它是客户机的端口号(服务器连接回客户机的地方?)对吗?对于此分配,对端口号指定了限制:
您的客户机和服务器应该使用Java安全管理器,并且您的项目必须包括为每个用户定义其运行所需权限的策略文件。允许您的服务器和客户端使用范围内的端口在本地主机上相互联系
2220—2230
.
我怎样才能遵守这个限制?或者这只适用于服务器监听的端口?我想如果我给你
accept
和
resolve
对大于2231的端口的权限。但我不知道这是否违反了限制。