Hallo,
Kann es sein das man in Applets keine DatagramSocket verwenden kann ?
Obwohl Applet und Server auf der gleichen Maschine laufen erhalte ich
folgende Exception:
com.ms.security.SecurityExceptionEx[udp/udpapplet.button1_actionPerformed]:
cannot access 0
at com/ms/security/permissions/NetIOPermission.check (NetIOPermission.java)
at com/ms/security/PolicyEngine.deepCheck (PolicyEngine.java)
at com/ms/security/PolicyEngine.checkPermission (PolicyEngine.java)
at com/ms/security/StandardSecurityManager.chk
(StandardSecurityManager.java)
at com/ms/security/StandardSecurityManager.checkListen
(StandardSecurityManager.java)
at java/net/DatagramSocket.create (DatagramSocket.java)
at java/net/DatagramSocket.<init> (DatagramSocket.java)
at udp/udpapplet.button1_actionPerformed (udpapplet.java:106)
at udp/udpapplet$1.actionPerformed (udpapplet.java:67)
at java/awt/Button.processActionEvent (Button.java)
at java/awt/Button.processEvent (Button.java)
at java/awt/Component.dispatchEventImpl (Component.java)
at java/awt/Component.dispatchEvent (Component.java)
at java/awt/EventDispatchThread.run (EventDispatchThread.java)
das Applet:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import com.borland.jbcl.layout.*;
import com.borland.jbcl.control.*;
import java.io.*;
import java.net.*;
public class udpapplet extends Applet implements Runnable {
// zum Beenden
boolean aus = false;
int inPort = 20532;
int outPort = 20531;
Thread th;
InetAddress addr = null;
String name = "";
boolean isStandalone = false;
BorderLayout borderLayout1 = new BorderLayout();
Panel panel1 = new Panel();
TextField textField = new TextField();
Button button1 = new Button();
TextArea textArea = new TextArea();
String server = "lux.internet-shop.net";
public void init() {
try {
name = "Client"+Math.round(Math.random()*1000);
// Serverdaten initialisieren
addr = InetAddress.getByName( server );
// Namen senden
byte inhalt[] = name.getBytes();
DatagramPacket paket = new DatagramPacket( inhalt,
inhalt.length, addr, outPort );
DatagramSocket outsocket = new DatagramSocket();
outsocket.send( paket );
outsocket.close();
jbInit();
// Ende der Eingabe durch den Benutzer, Server-Horcher beenden
aus = false;
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setLayout(borderLayout1);
textField.setColumns(40);
textField.setText("textField1");
button1.setLabel("send");
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
});
textArea.setText("textArea1");
this.add(panel1, BorderLayout.NORTH);
panel1.add(textField, null);
panel1.add(button1, null);
this.add(textArea, BorderLayout.CENTER);
}
public void start() {
if (th == null)
th = new Thread(this);
th.start();
}
public void stop() {
th = null;
}
void button1_actionPerformed(ActionEvent e) {
try {
// Kommandos lesen und an Server schicken
String s = textField.getText();
byte inhalt[] = s.getBytes();
DatagramPacket paket = new DatagramPacket( inhalt,
inhalt.length, addr, outPort );
DatagramSocket outsocket = new DatagramSocket();
outsocket.send( paket );
outsocket.close();
} catch ( Exception ex ) { ex.printStackTrace(); }
}
public void run() {
byte[] puffer = new byte[1024*2];
try {
while ( ! aus ) {
DatagramSocket inpsocket = new DatagramSocket( inPort );
DatagramPacket paket =
new DatagramPacket( puffer, puffer.length );
inpsocket.receive( paket );
System.out.println( name + " Habe " + paket.getLength() + " Bytes
empfangen" );
String nachricht = new String( puffer, 0, paket.getLength() );
textArea.appendText( nachricht + "\n");
inpsocket.close();
th.sleep( 300 );
}
} catch ( Exception e ) {
e.printStackTrace();
aus = true;
}
}
}