У меня есть простой апплет java helloworld и html-файл с тегом, ссылающимся на этот апплет. Все это работает нормально, когда я использую сервер Apache. Клиентский компьютер обращается к порту 80 на моем сервере, вводится HTML-код с тегом апплета и апплет открыт.
Однако, если я пытаюсь отправить этот же HTML-файл через сокет Java через какой-либо другой порт для клиента, чтобы открыть его из браузера, он не работает, я получаю ошибку апплета в браузере клиентов.
Вот как я могу отправить файл, когда соединение с сокетом принято:
DataOutputStream out=null;
File f=new File("C:\\Program Files\\Apache Software Foundation\\Apache2.2\\htdocs\\index.html");
DataInputStream htmlFile;
try {
out = new DataOutputStream(clientSocket.getOutputStream());
htmlFile = new DataInputStream(new FileInputStream(f));
int len = (int) f.length();
byte[] buf = new byte[len];
htmlFile.readFully(buf);
htmlFile.close();
out.writeBytes("HTTP/1.1 200 OK\r\n");
out.writeBytes("Content-Length: " + f.length() +"\r\n");
out.writeBytes("Content-Type: text/html\r\n\r\n");
out.write(buf);
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
И это ошибка, которую я получаю:
Java Plug-in 1.6.0_30
Using JRE version 1.6.0_30-b12 Java HotSpot(TM) Client VM
User home directory = C:\Documents and Settings\Administrator
----------------------------------------------------
c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
o: trigger logging
q: hide console
r: reload policy configuration
s: dump system and deployment properties
t: dump thread list
v: dump thread stack
x: clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------
java.net.MalformedURLException: unknown protocol: c
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at sun.plugin.util.GrayBoxPainter.setProgressFilter(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.setupGrayBoxPainter(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.access$700(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
exception: name.
java.lang.IllegalArgumentException: name
at sun.plugin2.applet.Applet2ClassLoader.addJar(Unknown Source)
at sun.plugin2.applet.Applet2Manager.loadJarFiles(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception: java.lang.IllegalArgumentException: name
java.net.MalformedURLException: unknown protocol: c
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at sun.plugin.util.GrayBoxPainter.setProgressFilter(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.setupGrayBoxPainter(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.access$700(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
exception: name.
java.lang.IllegalArgumentException: name
at sun.plugin2.applet.Applet2ClassLoader.addJar(Unknown Source)
at sun.plugin2.applet.Applet2Manager.loadJarFiles(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception: java.lang.IllegalArgumentException: name
java.lang.ClassFormatError: Incompatible magic value 1013018736 in class file MyApplet/HelloWorld
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception: java.lang.ClassFormatError: Incompatible magic value 1013018736 in class file MyApplet/HelloWorld
Если бы кто-нибудь мог сказать мне, что происходит или каким-либо другим способом сделать это, я был бы благодарен.
EDIT:
html исходный код (это просто тег апплета):
applet code = "MyApplet.HelloWorld" archive = "HelloWorldApplet.jar", ширина = 300, высота = 300 /
Клиент должен ввести IP-адрес сервера, за которым следует ": portNo." в браузер. «192.168.1.100:4444"
Да, я знаю об этом. Разве не для этого нужен апплет-тег? Мой JAR-файл помечен в HTML-файл. Если пользователь открывает html, файл jar должен быть загружен и видим в браузере клиентов. Разве это не так?
Я пробую что-то на Android. Я хотел бы иметь возможность открыть апплет, который мой Android отправляет на компьютер, который находится в той же сети Wi-Fi. Это выглядело как способ сделать это. Установка какого-либо веб-сервера на Android выглядела как нежелательное осложнение, если это вообще возможно.