Hallo Leute,
ich habe ein Client-Server-Programm geschrieben. Nun muss ich das mit AWT erweitern, sodass zum Schluss eine GUI verfügbar ist. Client und Server funktionieren auch ganz gut und die Kommunikation zwischen Client und Server auch. Jetzt möchte ich beim Server 3 Methoden implementieren: "Serverstart" "Serverstopp" "Serverport einstellen" damit wenn der Client eine von den 3 Buttons anklickt, je nachdem der Server gestartet gestoppt oder um den Serverport einzustellen. Hier mein Code zum Server:
ich brauche dringend Hilfe. Es wäre nett, wenn jemand behilflich sein könnte!
ich habe ein Client-Server-Programm geschrieben. Nun muss ich das mit AWT erweitern, sodass zum Schluss eine GUI verfügbar ist. Client und Server funktionieren auch ganz gut und die Kommunikation zwischen Client und Server auch. Jetzt möchte ich beim Server 3 Methoden implementieren: "Serverstart" "Serverstopp" "Serverport einstellen" damit wenn der Client eine von den 3 Buttons anklickt, je nachdem der Server gestartet gestoppt oder um den Serverport einzustellen. Hier mein Code zum Server:
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.awt.*;
import java.awt.event.*;
/**
* @author zengin
* Mithilfe der Klasse Server findet die Kommunikation zwischen dem Client
* und dem Server über den Socket 45678 statt. Diese Klasse wurde so implementiert,
* sodass sich mehrere Clients beim Server anmelden können. Der Server ist also
* multi-user-fähig. Der Server protokolliert seine Aktivitäten mit Datum - und
* Zeitausgabe in eine Logfile mit dem Datei-Namen "logfile.csv".
*/
public class Server extends Frame implements ActionListener, MouseListener {
/**
*
*/
private static final long serialVersionUID = 1L;
File serverdatei = new File("logfile.csv");
private static ArrayList<String> eintragsliste = new ArrayList<String>();
int anzahlClients = 0;
/*MenuBar menuBar;
Menu menu;
Menu menu1;
MenuItem menuItem;*/
PopupMenu popup;
Label label;
Button serverStart;
Button serverStopp;
Button serverPort;
int portStandard = 12345;
Label lServerPort;
Label lClients;
Label lServerGestartet;
Label lServerEnde;
TextField textClients;
TextField textPorteingeben;
public Server()
{
super("Server-GUI");
this.setSize(200,130);
this.setLocation(100,250);
this.setLayout(null);
this.setBackground(Color.lightGray);
MenuBar menuBar = new MenuBar();
this.setMenuBar(menuBar);
Menu menu = new Menu("Datei");
menuBar.add(menu);
MenuItem menuItem = new MenuItem("Oeffnen", new MenuShortcut(KeyEvent.VK_O));
menuItem.addActionListener(this);
menu.add(menuItem);
menu.addSeparator();
menuItem = new MenuItem("Datenbank auswählen");
menuItem.addActionListener(this);
menu.add(menuItem);
menu.addSeparator();
menuItem = new MenuItem("Beenden");
menuItem.addActionListener(this);
menu.add(menuItem);
menu = new Menu("Info");
menuBar.add(menu);
menuItem = new MenuItem("Info", new MenuShortcut(KeyEvent.VK_I));
menuItem.addActionListener(this);
menu.add(menuItem);
popup = new PopupMenu();
this.add(popup);
MenuItem mItem = new MenuItem("Datei Öffnen");
mItem.addActionListener(this);
popup.add(mItem);
popup.addSeparator();
mItem = new MenuItem("Datenbank auswählen");
mItem.addActionListener(this);
popup.add(mItem);
popup.addSeparator();
mItem = new MenuItem("Beenden");
mItem.addActionListener(this);
popup.add(mItem);
label = new Label();
label.setSize(320,30);
label.setLocation(25, 250);
add(label);
lServerEnde = new Label("Der Server wurde erfolgreich beendet");
lServerEnde.setSize(240, 30);
lServerEnde.setLocation(70, 300);
add(lServerEnde);
lServerEnde.setVisible(false);
lServerPort = new Label("Der Serverport ist: ");
lServerPort.setSize(100,30);
lServerPort.setLocation(70, 500);
add(lServerPort);
lClients = new Label("Clients, die sich angemeldet haben");
lClients.setSize(250, 30);
lClients.setLocation(70, 600);
add(lClients);
serverStart = new Button("Serverstart");
serverStart.setSize(150, 30);
serverStart.setLocation(45, 100);
serverStart.addMouseListener(this);
add(serverStart);
serverStopp = new Button("Serverstopp");
serverStopp.setSize(150, 30);
serverStopp.setLocation(45, 300);
serverStopp.addMouseListener(this);
add(serverStopp);
serverStopp.setVisible(true);
serverPort = new Button("Serverport übernehmen");
serverPort.setSize(150, 30);
serverPort.setLocation(90,140);
serverPort.addMouseListener(this);
add(serverPort);
String portwert = "" + portStandard;
textPorteingeben = new TextField(portwert);
textPorteingeben.setSize(100,30);
textPorteingeben.setLocation(120, 140);
add(textPorteingeben);
String zaehleClients = "" + anzahlClients;
textClients = new TextField(zaehleClients);
textClients.setEditable(false);
textClients.setSize(30,30);
textClients.setLocation(200,200);
add(textClients);
this.setVisible(true);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
this.enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
public void processMouseEvent(MouseEvent me)
{
if(me.isPopupTrigger())
popup.show(me.getComponent(), me.getX(), me.getY());
}
public void actionPerformed(ActionEvent ae)
{
Object o = ae.getSource();
if(((MenuItem)o).getLabel().equals("Oeffnen"))
{
FileDialog fileDialog = new FileDialog(this, "Datei Oeffnen", FileDialog.LOAD);
fileDialog.setVisible(true);
label.setText("Datei " + fileDialog.getDirectory() + fileDialog.getFile() + " ausgewählt");
}
else if(((MenuItem)o).getLabel().equals("Datenbank"))
{
FileDialog fileDialog = new FileDialog(this, "Datenbank auswählen", FileDialog.LOAD);
fileDialog.setVisible(true);
label.setText("Datenbank " + fileDialog.getDirectory() + fileDialog.getFile() + " ausgewählt");
}
else if(((MenuItem)o).getLabel().equals("Datenbank auswählen"))
{
FileDialog fileDialog = new FileDialog(this, "Datenbankauswahl", FileDialog.LOAD);
fileDialog.setVisible(true);
label.setText("Datenbank " + fileDialog.getDirectory() + fileDialog.getFile() + " ausgewählt");
}
else if(((MenuItem)o).getLabel().equals("Datei Öffnen"))
{
FileDialog fileDialog = new FileDialog(this, "Datei Oeffnen", FileDialog.LOAD);
fileDialog.setVisible(true);
label.setText("Datei " + fileDialog.getDirectory() + fileDialog.getFile() + " ausgewählt");
}
else if(((MenuItem)o).getLabel().equals("Beenden"))
{
MeinDialog meinDialog = new MeinDialog(this, "Ende-Dialog", "Wollen Sie die Anwendung wirklich beenden?");
if(meinDialog.getAntwort())
System.exit(0);
}
else if(((MenuItem)o).getLabel().equals("Info"))
{
@SuppressWarnings("unused")
MeinDialog meinDialog = new MeinDialog(this, "Info", "Dieses Programm enthält ein Menü");
}
}
public void mouseEntered(MouseEvent arg0)
{
}
@Override
public void mouseClicked(MouseEvent me) {
// TODO Auto-generated method stub
if(me.getComponent() == serverStopp)
{
}
if(me.getComponent() == serverStart)
{
}
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
/**
* Mithilfe der main-Methode findet die Kommunikation des Servers
* mit dem Client über Sockets statt. Die run-Methode
* der Klasse Thread wird ebenfalls implementiert und überschrieben.
* Innerhalb der run-Methode werden Zeit- und Datumsformate definiert.
* Die Optionen, die der Client auswählt, werden dem Server als Anfrage geschickt
* und werden auf der Konsole des Servers mit Zeit- und Datumsausgabe ausgegeben.
* Mithilfe der Variable "schreibenUeberSocket" vom Typ BufferedWriter-Objekt
* schreibt der Server dem Client über den Socket, ob die Auswahl des Clients
* in Ordnung ist. Der Aufruf der Methode start() in Zeile 136 der Klasse Thread
* bewirkt, dass sich mehrere Clients mit dem Server verbinden können.
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception
{
@SuppressWarnings("unused")
Server server = new Server();
ServerSocket myServerSocket = new ServerSocket(45678);
while(true)
{
final Socket myClientSocket = myServerSocket.accept();
(new Thread(new Runnable()
{
public void run()
{
try
{
BufferedReader lesenUeberSocket= new BufferedReader(new InputStreamReader(myClientSocket.getInputStream()));
BufferedWriter schreibenUeberSocket=new BufferedWriter(new OutputStreamWriter(myClientSocket.getOutputStream()));
Label aktuelleZeit = new Label(aktuelleUhrzeit(new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss")));
String anmeldung= aktuelleZeit + ";" + "Angemeldet an lokaler Adresse" + ";"
+ myClientSocket.getLocalAddress() + "\n";
eintragsliste.add(anmeldung);
writeLog(eintragsliste);
System.out.println(
"*************************" + "\n" + "> " + aktuelleZeit
+ "\t" + "\t" +
"--> Local Address angemeldet: "
+ myClientSocket.getLocalAddress());
String eingabeVonClientLesen;
try
{
while((eingabeVonClientLesen = lesenUeberSocket.readLine()) != null)
{
int a=Integer.parseInt(eingabeVonClientLesen);
if((a < 6) && (a > 0))
{
Label aktuelleZeit1 = new Label(aktuelleUhrzeit(new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss ")));
choice(a, aktuelleZeit1);
writeLog(eintragsliste);
System.out.println(
"*************************" + "\n" + "> " + aktuelleZeit1
+ "\t" + "\t" + "Der Client hat den Menuepunkt \'"
+ a + "\' ausgewaehlt");
schreibenUeberSocket.write("Ihre Auswahl ist in Ordnung :-)");
schreibenUeberSocket.newLine();
schreibenUeberSocket.flush();
}
else
{
choice(a, aktuelleZeit);
writeLog(eintragsliste);
System.out.println(
"*************************" + "\n" + "> " + aktuelleZeit
+ "\t" + "\t" + "Ungueltige Eingabe!");
schreibenUeberSocket.write("Ihre Auswahl ist leider nicht in Ordnung :-(");
schreibenUeberSocket.newLine();
schreibenUeberSocket.flush();
}
}
}
catch(Exception e)
{
System.out.println(
"*************************" + "\n" + e.getMessage());
}
System.out.println(
"*************************" + "\n" + "> " + aktuelleZeit
+ "\t" + "\t" +
"<-- Local Address abgemeldet: "
+ myClientSocket.getLocalAddress());
String abmeldung = aktuelleZeit + ";"
+ "Abgemeldet von der lokalen Adresse" + ";"
+ myClientSocket.getLocalAddress() + "\n";
eintragsliste.add(abmeldung);
writeLog(eintragsliste);
myClientSocket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally
{
}
}})).start();
}
}
public void serverstart() {
}
public static void serverstopp()
{
}
/**
* Diese Methode definiert die Zeit- und Datumsformate, die auf
* der Konsole des Servers und in der Logfile dementsprechend
* formatiert ausgegeben werden.
*/
private static String aktuelleUhrzeit(SimpleDateFormat sdf)
{
sdf = new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss");
Date aktuelleZeit = new Date();
return sdf.format(aktuelleZeit);
}
/**
* Mithilfe dieser Methode werden die einzelnen Einträge der Logfile formatiert.
* Die einzelnen Case-Fälle, die der Client auswählt,
* werden dann mit der entsprechend aktuellen Uhrzeit und dem aktuellen Datum
* in die Datei "logfile.csv" hinzugefügt.
* @param a
* @param zeit
*/
public static void choice(int a, Label zeit) {
StringBuilder gebeString = new StringBuilder();
gebeString.append(zeit);
gebeString.append(";");
switch (a) {
case 1:
gebeString.append("Der Client hat den Menuepunkt ");
gebeString.append(a + " ausgewaehlt");
gebeString.append(";");
gebeString.append("neue Person aufnehmen");
gebeString.append(";");
break;
case 2:
gebeString.append("Der Client hat den Menuepunkt ");
gebeString.append(a + " ausgewaehlt");
gebeString.append(";");
gebeString.append("Records auflisten");
gebeString.append(";");
break;
case 3:
gebeString.append("Der Client hat den Menuepunkt ");
gebeString.append(a + " ausgewaehlt");
gebeString.append(";");
gebeString.append("Records in eine Datei sichern");
gebeString.append(";");
break;
case 4:
gebeString.append("Der Client hat den Menuepunkt ");
gebeString.append(a + " ausgewaehlt");
gebeString.append(";");
gebeString.append("Datei löschen");
gebeString.append(";");
break;
default:
break;
}
gebeString.append("\n");
eintragsliste.add(gebeString.toString());
}
/**
* Mithilfe dieser Methode werden die Einträge
* in die serverdatei "logfile.csv" geschrieben.
* Innerhalb dieser Methode werden die Zeichen-Stream-Klassen
* BufferedWriter und FileWriter angewendet. Die
* Zeichen-Stream-Klasse BufferedWriter schickt seine Daten
* an FileWriter und dieser schreibt dann die Daten in die
* Datei "logfile.csv".
*/
public static void writeLog(ArrayList<String> eintragsliste) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("logfile.csv"));
for (int i = 0; i < eintragsliste.size(); i++) {
bw.write(eintragsliste.get(i));
}
bw.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
ich brauche dringend Hilfe. Es wäre nett, wenn jemand behilflich sein könnte!