2012-09-10 4 views
0

자바 업데이트 후 문제가 발생했습니다 (생각합니다) 제 Cpp 서버에 연결하면 (제대로 작동하는 것 같습니다) 오류 메시지가 나타납니다. 도와주세요.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.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.policy와 관련된 문제일지도 모른다고 생각하지만 정확한 수정 방법을 모른다.

어, 어떻게 스택 추적을합니까? 정책 파일 (들)의 위치 이 http://java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html

기사가 친절하게 설명합니다

답변

2

것은이 권한을 부여하려고 : 권한 부여에 대한

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

자세한 정보를, 당신은 다음 링크를 확인하실 수 있습니다 특정 정책 파일을 사용하여 응용 프로그램을 실행하는 방법에 대해 설명합니다.

를 Where 정책 파일과 정책 파일이로드되는 순서 찾을 수있는 링크 정보를 다음 : 지금까지 내가 이해 http://download.java.net/jdk8/docs/technotes/guides/security/PolicyFiles.html#DefaultLocs

Windows의 경우, 당신은 '파일을 배치 할 수 있습니다를 .java.policy '를'내 문서 '폴더에 복사하십시오. 브라우저에서 애플릿을 실행하면이 정책 파일이 사용자 정책 파일로 검색됩니다.

+0

어떤 정책 파일에이 텍스트를 추가합니까? – Confident

+0

특정 정책 파일을 원할 경우 브라우저에서 실행할 애플릿에 추가 자바 매개 변수를 추가하는 방법 – Confident

+0

java.security도 있습니다 – Confident

2
System.exit(1); 

심지어 신뢰할 수있는 애플릿은 System.exit(int)을 호출 할 수 없습니다. 보안 관리자가없는 애플릿 으로 끝나야합니다. 게스트 하우스를 태우는 손님과 같습니다.

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

그리고 정책 파일에 대한 물건을 무시 :

이 같은 뭔가를 더 좋을 것이다. 그들은 실세계 (야생 웹) 배치를 위해 어떤 것도 해결하지 못합니다.

+0

응답. 내 IDE는 문제가 "소켓 소켓 = 새로운 소켓 (addr, 4000);"이라고 말합니다. 내가 항아리에 서명하면 그것은 최선의 행동 방침이 될 것인가 아니면 다른 것을해야합니까?나는 그것을 시도했지만 계속 추구 할 수있다. – Confident

+0

포맷에 대해 미안하지만 System.exit 라인을 제거했지만 여전히 같은 오류가 발생한다. 그리고 아무런 오류 메시지가 나타나지 않습니다. – Confident

+0

당신의 고마움을 고맙게 생각합니다. 여기가 좀 어려워졌습니다. – Confident

0

아하! 클래스 파일을 보낸 동일한 소스에서 애플릿을 실행할 수 없다는 것을 배웠습니다. Lighttpd를 설치 한 후 http://localhost/index.htm으로 애플릿을 볼 수 있습니다. 희망이 다른 사람들을 도울 것입니다!