簡體   English   中英

J2ME套接字程序中的權限檢查失敗

[英]Permission check failed in J2ME Socket program

我想通過“我的電腦”主機(服務器)和Raspberry pi板(客戶端)之間的套接字進行通信。 我使用以下代碼:

對於服務器

 public void startApp() {
        try
    {
 ServerSocketConnection ssc = (ServerSocketConnection) 
  Connector.open("socket://:9002");
  StreamConnection sc = null;
  InputStream is = null;
  try{
    sc = ssc.acceptAndOpen();
    is = sc.openInputStream();
    int ch = 0;
    StringBuffer sb = new StringBuffer();
    while ((ch = is.read()) != -1){
      sb.append((char)ch);
    }
    System.out.println(sb.toString());
  } finally{
      ssc.close();
      sc.close();
      is.close();
  }
} catch (IOException x) {
    x.printStackTrace();
}


    }

對於客戶

           try{
  SocketConnection sc = (SocketConnection) 
    Connector.open("socket://10.91.40.145:9002");
  OutputStream os = null;
  try{
    os = sc.openOutputStream();
    byte[] data = "Hello from a socket!".getBytes();
    os.write(data);
  } finally{
      sc.close();
      os.close();
  }
} catch (IOException x){
    x.printStackTrace();
}

在Raspberry pi上運行客戶端時,出現以下日志:

Java is starting. Press Ctrl-C to exit
[CRITICAL] [SECURITY] iso=2:Permission check failed: javax.microedition.io.SocketProtocolPermission "socket://10.91.40.145:9002" ""
TRACE: <at java.security.AccessControlException: >, startApp threw an Exception
java.security.AccessControlException: 
 - com/oracle/meep/security/AccessControllerInternal.checkPermission(), bci=128
 - java/security/AccessController.checkPermission(), bci=1
 - com/sun/midp/io/j2me/socket/Protocol.open(), bci=127
 - com/sun/midp/io/j2me/socket/Protocol.openPrim(), bci=4
 - javax/microedition/io/Connector.open(), bci=77
 - javax/microedition/io/Connector.open(), bci=6
 - javax/microedition/io/Connector.open(), bci=3
 - smartgridapidemopi/SmartGridAPIdemoPI.startApp(SmartGridAPIdemoPI.java:48)
 - javax/microedition/midlet/MIDletTunnelImpl.callStartApp(), bci=1
 - com/sun/midp/midlet/MIDletPeer.startApp(), bci=5
 - com/sun/midp/midlet/MIDletStateHandler.startSuite(), bci=264
 - com/sun/midp/main/AbstractMIDletSuiteLoader.startSuite(), bci=38
 - com/sun/midp/main/CldcMIDletSuiteLoader.startSuite(), bci=5
 - com/sun/midp/main/AbstractMIDletSuiteLoader.runMIDletSuite(), bci=132
 - com/sun/midp/main/AppIsolateMIDletSuiteLoader.main(), bci=26
java.security.AccessControlException: 
 - com/oracle/meep/security/AccessControllerInternal.checkPermission(), bci=[ERROR] [AMS] iso=1:Sending the notification: com.oracle.midp.proxy.RunCommand@d17b7662. FAILED, proxy is disconnected
128
 - java/security/AccessController.checkPermission(), bci=1
 - com/sun/midp/io/j2me/socket/Protocol.open(), bci=127
 - com/sun/midp/io/j2me/socket/Protocol.openPrim(), bci=4
 - javax/microedition/io/Connector.open(), bci=77
 - javax/microedition/io/Connector.open(), bci=6
 - javax/microedition/io/Connector.open(), bci=3
 - smartgridapidemopi/SmartGridAPIdemoPI.startApp(SmartGridAPIdemoPI.java:48)
 - javax/microedition/midlet/MIDletTunnelImpl.callStartApp(), bci=1
 - com/sun/midp/midlet/MIDletPeer.startApp(), bci=5
 - com/sun/midp/midlet/MIDletStateHandler.startSuite(), bci=264
 - com/sun/midp/main/AbstractMIDletSuiteLoader.startSuite(), bci=38
 - com/sun/midp/main/CldcMIDletSuiteLoader.startSuite(), bci=5
 - com/sun/midp/main/AbstractMIDletSuiteLoader.runMIDletSuite(), bci=132
 - com/sun/midp/main/AppIsolateMIDletSuiteLoader.main(), bci=26
[ERROR] [AMS] iso=1:Sending the notification: com.oracle.midp.proxy.RunCommand@d17b76f0. FAILED, proxy is disconnected
[ERROR] [AMS] iso=1:Sending the notification: com.oracle.midp.proxy.StopCommand@d17b76ff. FAILED, proxy is disconnected

如何處理此AccessControlException。

端口9002被防火牆或防病毒軟件關閉。 檢查端口可用性。

提供API權限javax.microedition.io.SocketProtocolPermission(“ socket:// ”)javax.microedition.io.SocketProtocolPermission(“ socket://:*”)

在您的jad文件中

您可以通過導航項目屬性-> Application Descriptor或選擇API Permission選項卡在netbeans中進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM