Status indicator telnet service
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.
December 12, 2007