ConnectionToRelay.jsl 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package DokeosAppShare;
  2. import java.net.*;
  3. import java.io.*;
  4. /**
  5. * Summary description for ConnectionToRelay.
  6. */
  7. public class ConnectionToRelay
  8. {
  9. Socket relay;
  10. ReadWriteThread thrdReadRelay;
  11. Socket vnc;
  12. ReadWriteThread thrdReadVNC;
  13. public ConnectionToRelay(String serverID) throws IOException
  14. {
  15. relay = new Socket(Config.getRelayHostName(), Config.getRelayPort());
  16. OutputStream out = relay.getOutputStream();
  17. CommandConnection.writeCommand(out, CommandConnection.RELAY_CONNECTION, serverID);
  18. InputStream in = relay.getInputStream();
  19. //Wait for byte from relay
  20. System.out.println("Waiting for byte from relay...");
  21. int read = in.read();
  22. System.out.println("read on relay socket : " + read);
  23. //Connect to VNC
  24. System.out.println("Connecting to VNC...");
  25. vnc = new Socket(Config.getVNCHostName(), Config.getVNCPort());
  26. //Duplex
  27. thrdReadRelay = new ReadWriteThread(relay, vnc);
  28. thrdReadRelay.setDaemon(true);
  29. thrdReadRelay.start();
  30. thrdReadVNC = new ReadWriteThread(vnc, relay);
  31. thrdReadVNC.setDaemon(true);
  32. thrdReadVNC.start();
  33. System.out.println("Duplex started");
  34. }
  35. }
  36. class ReadWriteThread extends Thread
  37. {
  38. private final Socket socketIn;
  39. private final Socket socketOut;
  40. public ReadWriteThread(final Socket socketIn, final Socket socketOut)
  41. {
  42. this.socketIn = socketIn;
  43. this.socketOut = socketOut;
  44. }
  45. public void run()
  46. {
  47. try
  48. {
  49. readWrite(socketIn.getInputStream(), socketOut.getOutputStream());
  50. }
  51. catch (Throwable e)
  52. {
  53. e.printStackTrace();
  54. try
  55. {
  56. socketIn.close();
  57. }
  58. catch (Exception ex)
  59. {
  60. ex.printStackTrace();
  61. }
  62. try
  63. {
  64. socketOut.close();
  65. }
  66. catch (Exception ex)
  67. {
  68. ex.printStackTrace();
  69. }
  70. }
  71. System.out.println("end connection relay.");
  72. }
  73. private void readWrite(InputStream in, OutputStream out) throws IOException
  74. {
  75. int b = 0;
  76. int readCount = 0;
  77. byte[] buffer = new byte[1024*10];
  78. b = in.read();
  79. while (b >= 0)
  80. {
  81. out.write(b);
  82. readCount = in.read(buffer, 0, buffer.length);
  83. out.write(buffer, 0, readCount);
  84. b = in.read();
  85. }
  86. }
  87. }