2012-09-10 82 views
0

我有一个问题,开始发生后,我更新Java(我认为)当我尝试连接到我的Cpp服务器(似乎工作得很好),我收到一条错误消息,我找不到任何帮助。获取Java套接字连接

下面是错误消息

java.security.AccessControlException: access denied 
("java.net.SocketPermission" "127.0.0.1:4000" "connect,resolve") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366) 
    at java.security.AccessController.checkPermission(AccessController.java:555) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051) 
    at java.net.Socket.connect(Socket.java:574) 
    at java.net.Socket.connect(Socket.java:528) 
    at java.net.Socket.<init>(Socket.java:425) 
    at java.net.Socket.<init>(Socket.java:208) 
    at jclientbare.init(jclientbare.java:27) 
    at sun.applet.AppletPanel.run(AppletPanel.java:434) 
    at java.lang.Thread.run(Thread.java:722) 

的Java源代码如下

import java.awt.*; 
import java.applet.*; 
import java.io.*; 
import java.net.*; 
import javax.swing.*; 

public class jclientbare extends Applet { 


    static BufferedReader in; 
    static PrintStream out; 

    public void init() { 

     try { 
       System.out.println("Test NN"); 
      Socket socket = new Socket("localhost", 4000); 
     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      out = new PrintStream(socket.getOutputStream(), true); 
     } 

     catch (UnknownHostException e) { 

     JOptionPane.showMessageDialog(null, "Unknown Host.."); 
      System.out.println("Unknown host: kq6py"); 

      } catch (IOException e) { 

     JOptionPane.showMessageDialog(null, "NO IO."); 
      System.out.println("No I/O"); 
     } 
    } 

} 

Java小程序不注册错误消息的连接,它只是炸弹。任何帮助,将不胜感激!我认为这可能是java.policy的问题,但我不知道如何解决它。

呃,你如何做一个堆栈跟踪?

回答

2

尝试使用此方法授予权限:

grant 
{ 
    permission java.net.SocketPermission 
    "127.0.0.1:4000", "connect,resolve"; 
}; 

有关详细信息有关授予权限,您可以查看以下链接: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html

文章解释很好地在政策文件(S)位于以及如何运行具有特定策略文件的应用程序。

以下链接细节在哪里可以找到政策文件,并在该策略文件被加载顺序: http://download.java.net/jdk8/docs/technotes/guides/security/PolicyFiles.html#DefaultLocs

据我了解,如果你是Windows,那么你可以将一个文件“ .java.policy'放入'我的文档'文件夹中。当你在浏览器中运行一个applet时,它会找到这个策略文件作为用户策略文件。

+0

哪些政策文件是否将此文本添加到? – Confident

+0

如果我想要一个特定的策略文件,我如何将额外的java参数添加到要从浏览器启动的applet – Confident

+0

还有java.security – Confident

2
System.exit(1); 

即使信任的小程序也不能调用System.exit(int)。没有安全管理器的小程序不应该呼叫虚拟机结束。这就像客人烧毁宾馆。

这将是更好的做一些事情,如:

URL crash = new URL(getCodeBase(), "crash.html"); 
getAppletContext().showDocument(crash); 

而忽略有关政策文件的东西。他们没有解决任何真实世界(野外网络)部署。

+0

感谢您的性反应。我的IDE说,问题是“套接字套接字=新套接字(地址,4000);”如果我在罐子上签字,那是否是最好的行动方案,还是应该采取其他措施?我尝试过,但我可以继续追求 – Confident

+0

格式化的抱歉,但我删除了System.exit行,我仍然得到相同的错误。没有我没有看到任何对话只是同样的错误 – Confident

+0

我很欣赏你的考虑...我在这里有点不知所措 – Confident

0

啊哈!我知道你不能在发送给你类文件的同一个源代码上运行一个applet。安装Lighttpd后,我可以通过http://localhost/index.htm进入我的小程序。希望这会帮助别人!