我在一个简单的HTML页面上插入了一个Java Applet:
<applet width="100%" height="100%" id="StatApplet" code="stat.applet.StatApplet.class" archive="stat.jar">
<PARAM NAME="_cx" VALUE="25903">
<PARAM NAME="_cy" VALUE="19738">
<param name="frame" value="0">
<param name="module" value="1">
<param name="count" value="4">
<param name="image" value="RSload.gif">
<param name="boxbgcolor" value="#ffffff">
<param name="boxmessage" value="Monitor loading">
</applet>
小程序使用有效的GlobalSign证书进行签名。 JAR和HTML文件放置在http://192.168.0.91/
,Beck IPC SC143的嵌入式Web服务器上。 applet打开与其加载的服务器的套接字连接:
try {
final int CONNECT_ETHERNET_TIMEOUT_MS = 5000;
final int PORT_STATUSMON = 945;
String host = getCodeBase().getHost(); // get host address
if (host.equals("")) {
host = getParameter("host"); // to run applet from eclipse
}
InetAddress inetAddress = InetAddress.getByName(host);
Socket ethernetSocket = new Socket();
ethernetSocket.connect(new InetSocketAddress(inetAddress, PORT_STATUSMON), CONNECT_ETHERNET_TIMEOUT_MS);
ethernetSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
所有这些都适用于Java 7 Update 45,但在将VM升级到Java 8 Update 25之后,我遇到了安全性异常:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "192.168.0.91:945" "connect,resolve")
在connect()处抛出异常。 applet是否可以与从中加载的主机进行套接字连接?
答案 0 :(得分:0)
确保您的主机名已提供applet.getDocumentBase().getHost()
如果您尝试连接到127.0.0.1但是从192.168.x.x或10.0.0.x提供服务,那么您将获得AccessControlException
你应该使用与此相关:
new Socket( applet. getDocumentBase (). getHost (), 4444 )