Hi all, I have run into another problem. I can recieve messages from the server that I am tunnelling to and send them to the applet fine. However it is proving difficult to do things the other way round, when I want to send a message from the applet to the internal server I am having "java.io.EOFException: code expected" exceptions appear.
The connection from the Applet is just a simple URLConnection. This is not closed unless the applet closes or the user quits. I have some tomcat logs to show you what is going wrong. I hope someone can be of help here. Thanks, Stuart Stephen start of servlet ToApplet() ToServer() ...Reading for Object Streams java.io.EOFException: Expecting code at java.io.ObjectInputStream.peekCode(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at TestTunnel$ToApplet.run(TestTunnel.java:94) >From ChatServer: "some random string object blah blah blah" ...Reading for Object Streams java.io.EOFException: Expecting code at java.io.ObjectInputStream.peekCode(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at TestTunnel$ToApplet.run(TestTunnel.java:94) java.io.EOFException: Expecting code at java.io.ObjectInputStream.peekCode(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at TestTunnel$ToApplet.run(TestTunnel.java:94) etc... My code is as follows. import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.ServletException.*; import javax.servlet.UnavailableException.*; import java.lang.Exception.*; import java.io.*; import java.util.*; import java.net.*; public class TestTunnel extends HttpServlet { // applet connections ObjectOutputStream objOut = null; ObjectInputStream objIn = null; // chatserver connections Socket socket = null; ObjectOutputStream sockObjOut = null; ObjectInputStream sockObjIn = null; ToApplet app = null; ToServer ser = null; protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { try { // get data stream from applet System.err.println("start of servlet"); objOut = new ObjectOutputStream(res.getOutputStream()); objIn = new ObjectInputStream(req.getInputStream()); objOut.useProtocolVersion(objOut.PROTOCOL_VERSION_1); // create socket to chat server and the streams socket = new Socket("127.0.0.1", 3000); sockObjOut = new ObjectOutputStream(socket.getOutputStream()); sockObjIn = new ObjectInputStream(socket.getInputStream()); sockObjOut.useProtocolVersion(sockObjOut.PROTOCOL_VERSION_1); app = new ToApplet(objIn, sockObjOut); ser = new ToServer(sockObjIn, objOut); while(ser.connIsAlive() || app.connIsAlive()) { try { Thread.sleep(500); } catch(Exception ex) { ex.printStackTrace(); } } System.err.println("end of servlet"); } catch(Exception e) { e.printStackTrace(); } } public void destroy() { try { objIn.close(); objOut.close(); sockObjIn.close(); sockObjOut.close(); socket.close(); } catch(Exception e) { e.printStackTrace(); } } private class ToApplet extends Thread { ObjectOutputStream objOut = null; ObjectInputStream sockObjIn = null; boolean isAlive = true; public ToApplet(ObjectInputStream sockObjIn, ObjectOutputStream objOut) { try { System.err.println("ToApplet()"); this.objOut = objOut; this.sockObjIn = sockObjIn; this.start(); } catch(Exception e) { e.printStackTrace(); } } public void run() { try { Object obj = new Object(); while(obj!=null) { try { System.err.println("...Reading for Object Streams"); obj = sockObjIn.readObject(); System.err.println("...Read Object Stream"); write(obj); } catch(EOFException eof) { eof.printStackTrace(); } catch(Exception ex) { ex.printStackTrace(); } } } catch(Exception e) { e.printStackTrace(); } } public boolean connIsAlive() { return isAlive; } public void write(Object msg) { try { System.err.println("ChatApplet: "+msg.toString()); objOut.writeObject(msg); objOut.flush(); objOut.reset(); } catch(Exception e) { e.printStackTrace(); isAlive = false; } } } private class ToServer extends Thread { ObjectInputStream objIn = null; ObjectOutputStream sockObjOut = null; boolean isAlive = true; public ToServer(ObjectInputStream objIn, ObjectOutputStream sockObjOut) { try { System.err.println("ToServer()"); this.objIn = objIn; this.sockObjOut = sockObjOut; this.start(); } catch(Exception e) { e.printStackTrace(); } } public void run() { try { Object obj = null; while((obj=objIn.readObject())!=null) { write(obj); } } catch(Exception e) { e.printStackTrace(); isAlive = false; } } public boolean connIsAlive() { return isAlive; } public void write(Object msg) { try { System.err.println("ChatServer: "+msg.toString()); sockObjOut.writeObject(msg); sockObjOut.flush(); sockObjOut.reset(); } catch(Exception e) { e.printStackTrace(); } } } } -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>