Status indicator telnet service

Posted On December 12, 2007

Filed under Uncategorized
Tags: ,

Comments Dropped leave a response

KeyManager.java (with a GUI front-end to set the status)

import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Calendar;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class KeyManager extends JFrame implements ActionListener, Runnable
{
  private ServerSocket server;
  private Socket client;

  private OutputStream out;

  private String beginMsg = "\n*******\n\n";
  private String endMsg   = "\n\n*******\n\n";
  private String message  = "";
  private String tip = "type message and press enter";

  private JTextField msgField;
  private JLabel label;

  public KeyManager()
  {
    try {
      server = new ServerSocket(2300);
    } catch(IOException ioe) {
      System.err.println("Error listening on port 2300");
      System.exit(0);
    }
    System.out.println("Started telnet server!\n");

    this.setTitle("Key Manager");
    this.setBounds(100, 400, 600, 60);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    panel.add(new JLabel("Current Message: "));
     label = new JLabel("");
     label.setForeground(Color.BLUE);
     panel.add(label);
    msgField = new JTextField(20);
     msgField.setText(tip);
     msgField.setSelectionStart(0);
     msgField.setSelectionEnd(tip.length());
     msgField.addActionListener(this);
     panel.add(msgField);

    this.getContentPane().add(panel, BorderLayout.SOUTH);
    this.setVisible(true);
  }

  public void actionPerformed(ActionEvent ae)
  {
    this.message = msgField.getText();
    label.setText(this.message);
    msgField.setText(tip);
    msgField.setSelectionStart(0);
    msgField.setSelectionEnd(tip.length());

    this.message += "\n@ " + Calendar.getInstance().getTime();
  }

  public void run()
  {
    while(true) {
      try {
        client = server.accept();
        System.out.println("[ Connected to " + client.getInetAddress() + " ]");

        out = client.getOutputStream();
        String message = this.beginMsg + this.message + this.endMsg;
        message += "served at " + Calendar.getInstance().getTime() + "\n";
        byte[] b = new byte[message.length()];
        for(int i = 0; i < b.length; i++) {
          b[i] = (byte) message.charAt(i);
        }
        out.write(b);

        out.close();
        client.close();
        System.out.println("[ Closed connection ]\n");
      } catch(IOException ioe) {
        System.err.println("error during connection\n");
      }
    }
  }

  public static void main(String args[])
  {
    new Thread(new KeyManager()).start();
  }

}

This code will run a telnet server on port 2300. The negotiation part of telnet protocol is simply skipped because it was not required and without all that, the implementation looks very simple and straightforward. I doubt, if people will classify it as a telnet server :) The only reason to relate it to telnet is that it can be accessed via telnet client readily available on most of the machines. (e.g. telnet <server_ip_address> 2300)

Note:
I usually post the code without line-number indicator. It can be easily done by writing

cat -n << EOF

Pasting the code, and writing EOF as the last line.
Pressing enter will output the code with line numbers.

Respond now.