Beispiel #1
0
  /**
   * try to connect, produce valid DataInputStream
   *
   * @return true on success
   */
  private boolean open() {
    // TODO Auto-generated method stub
    int triesleft = 3;

    final int randmillis = 200;
    //		conntim.purge(); //?
    closetimertask.cancel();

    status = "connect: start";
    if (null == mysock) {
      mysock = new Socket();
    }

    while ((null == mysock) || !mysock.isConnected()) {
      try {
        mysock.connect(
            new InetSocketAddress(lsip, lsport)); // reconnect the same socket will fail after close

        //			mysock = new Socket(lsip, lsport);

        inStream = new DataInputStream(mysock.getInputStream());
        outStream = new DataOutputStream(mysock.getOutputStream());
      } catch (IllegalArgumentException e) {
        triesleft--;
        //			e.printStackTrace();
        System.err.printf("%d tries left: %s\n", triesleft, e.toString());
        if (triesleft <= 0) {
          status = String.format("conn failed: %s", e.toString());
          return false;
        }
      } catch (IOException e) {
        triesleft--;
        System.err.printf("%d tries left: %s", triesleft, e.toString());
        //			System.err.print(e.toString());
        e.printStackTrace();

        if (triesleft <= 0) {
          status = String.format("conn failed: %s", e.toString());
          return false;
        }
      }

      try {

        Thread.sleep((int) (100 + randmillis * Math.random()), 1);
        //			Thread.sleep(500,1);
      } catch (InterruptedException e) {
        // auch egal
      }
    }
    status = "connected";

    closetimertask =
        new TimerTask() {
          @Override
          public void run() {
            close();
          }
        };
    //		conntim.schedule(closetimertask, 10000);

    return true;
  }