import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.text.*;
/**
*
* Beschreibung.
*
* @version 1.0 vom 01.07.2004
* @author Bernd Löhe
*/
public class meinServer extends JFrame {
// Anfang Variablen
static JTextField jtfaus = new JTextField();
private JButton jbusenden = new JButton();
static final String newline = System.getProperty("line.separator");
//------------------------------------------------
JScrollPane scrollPane = new JScrollPane();
static final JTextPane jtp1 = new JTextPane(); // static final, das ist wichtig
static String chattext;
static Socket socket;
// Ende Variablen
public meinServer(final String title) {
// Frame-Initialisierung
super("TCP-Server"); // erzeugt den Fensternamen
addWindowListener(new WindowAdapter() {
public void windowClosing(final WindowEvent evt) { System.exit(0); } });
setBounds(30, 30, 700, 450);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten
jtfaus.setText("");
jtfaus.setBounds(10, 340, 500, 25);
getContentPane().add(jtfaus);
jbusenden.setText("senden");
jbusenden.setBounds(10, 370, 100, 25);
getContentPane().add(jbusenden);
jbusenden.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
jbusendenActionPerformed(evt); } });
jtp1.setBounds(10, 30, 500, 300);
jtp1.setEnabled(false);
jtp1.setContentType("TEXT/RTF");
jtp1.setText("Wilkommen im Chat" + newline);
getContentPane().add(jtp1);
scrollPane.setViewportView(jtp1);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setBounds(10, 30, 500, 300);
getContentPane().add(scrollPane, BorderLayout.WEST);
// Ende Komponenten
setVisible(true);
}
// Anfang Ereignisprozeduren
public void jbusendenActionPerformed(final ActionEvent evt) {
chattext = jtfaus.getText();
//----------------------------------------------------------------
try
{
PrintWriter out;
out=new PrintWriter(
new DataOutputStream(socket.getOutputStream()),true);
out.println("Serverantwort: " + chattext); // sendet
out.close();
}
catch (Exception e)
{ System.err.println(e);
}
jtfaus.setText(""); // leert das Textfeld
jtfaus.requestFocus (); // macht das Textfeld wieder aktiv
}
// Ende Ereignisprozeduren
public static class echod implements Runnable
{ //PrintWriter Out;
BufferedReader In;
public echod (Socket socket)
{ try // generiere Ein- und Ausgabestreams und einen Thread
{ //Out=new PrintWriter(
//new DataOutputStream(socket.getOutputStream()),true);
In=new BufferedReader(new InputStreamReader(
new DataInputStream(socket.getInputStream())));
new Thread(this).start();
// starte eine Thread (und damit run())
}
catch (Exception e)
{ System.err.println(e);
}
}
public void run ()
// der Thread, der eine Verbindung verwaltet.
{ try
{ while (true) // Echo-Schleife
{ String strbuff = jtp1.getText();
String s=In.readLine();
chattext = jtfaus.getText();
jtp1.setText(strbuff + s + newline); // Übergibt den Text zum JTextPane
if (s.equals("QUIT")) break;
//Out.println(chattext); // sendet
}
// Streams immer schließen:
In.close();
//Out.close();
}
catch (Exception e)
{ System.out.println(e);
}
}
}
public static void main(final String[] args){ // Einstieg ins Programm
new meinServer("meinServer");
try // generiere wartenden Socket
{ ServerSocket server=new ServerSocket(6000);
while (true) // Läßt sich nur durch CNTRL-C abbrechen
{ Socket socket=server.accept(); // Socket wartet
new echod(socket); // Verbindung gefunden
}
}
catch (Exception e)
{ System.err.println(e);
}
}
}