Hallo Leute,
ich habe eine Frage:
Ich habe zwei Programme geschrieben und davon ist ein ein Server:
Und dazu habe ich einen Client:
Mein Problem ist ganz einfach:
Ich weiß nicht wie ich es realisieren soll. Also ich kann eine Verbindung vom Client auf den Server herstellen und Daten übertragen, aber ich weiß nicht wie ich es in die andere Richtung realisiert wird.
Kann mir jemand helfen?
Bzw. einen Tipp geben wie ich das machen soll?
ich habe eine Frage:
Ich habe zwei Programme geschrieben und davon ist ein ein Server:
Code:
import java.net.*;
import java.io.*;
import java.util.*;
public class SpardoseServer extends Thread {
protected Socket socket = null;
public static int port;
private SpardoseServer ss;
private static String pfad = "", datein = "";
private static KundenAuslesen ka;
private static Person[] personen;
public static void main(String args[]) {
System.out.println("Spardosen-Server v. 0.1b\n");
try {
BufferedReader lesen = new BufferedReader(new FileReader("config.ini"));
String zeile;
while ((zeile = lesen.readLine()) !=null) {
if (zeile.contains("pfad")) {
pfad = zeile.replace("pfad=" , "");
}
if (zeile.contains("datein")) {
datein = zeile.replace("datein=" , "");
}
if (zeile.contains("port")) {
port = Integer.parseInt(zeile.replace("port=" , ""));
}
}
}catch(Exception f){
System.out.println("Fehler: " +f);
}
if ((pfad == "") || (datein == ""))
{
if (pfad == "") System.out.println("pfad fehlt");
if (datein == "") System.out.println("dateinamem fehlt");
System.exit(0);
} else
{
if (port == 0)
{
port = 4711;
System.out.println("Standard-Port gesetzt!");
}
System.out.println("Port: "+port);
System.out.println("Config erfolgreich ausgelesen ...");
}
try
{
BufferedReader lesen2 = new BufferedReader(new FileReader(pfad+"\\"+datein));
} catch (Exception e)
{
try {
BufferedWriter bw2 = new BufferedWriter(new FileWriter(pfad+"\\"+datein));
} catch (Exception f)
{
System.out.println("Datei kann nicht erstellt werden!");
System.exit(0);
}
}
ka = new KundenAuslesen(pfad+"\\"+datein);
personen = ka.auslesen();
System.out.println("Server erfolgreich gestartet!\n\n");
// Socket bereitstellen, an dem "gelauscht" wird
try {
ServerSocket listen = new ServerSocket(port);
while(true) {
SpardoseServer sClient = new SpardoseServer(listen.accept());
}
} catch (IOException ioe) {
System.err.println("Fehler: "+ioe.toString());
}
}
public SpardoseServer(Socket socket) {
this.socket = socket;
start();
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader in = new BufferedReader(isr);
String tmp;
while ((tmp =in.readLine()) != null)
{
if (tmp.startsWith("kopen"))
{
System.out.println(tmp);
tmp = tmp.replace("kopen ", "");
String[] tmp2 = tmp.split(" ");
int kid = Integer.parseInt(tmp2[0]);
System.out.println(socket.getRemoteSocketAddress()+" Kunde "+personen[kid].getName()+"(ID: "+personen[kid].getId()+") öffnen");
if (kid < ka.getPersonenAnzahl())
{
// try {
// tmpi = Integer.parseInt(fe.user.getText());
// System.out.println(personen[].getName());
// System.out.println(personen[1].getPassword());
// e = true;
// }
if (personen[kid].getLock())
{
System.out.println(socket.getRemoteSocketAddress()+" Fehler: Kunde "+personen[kid].getName()+"(ID: "+personen[kid].getId()+") ist schon geöffnet!");
} else
{
System.out.println(socket.getRemoteSocketAddress()+" Kunde "+personen[kid].getName()+"(ID: "+personen[kid].getId()+") wird gesperrt!");
}
}
// if (Integer.parseInt(fe.user.getText()) < ka.getPersonenAnzahl())
// {
// try {
// tmpi = Integer.parseInt(fe.user.getText());
// System.out.println(personen[1].getName());
// System.out.println(personen[1].getPassword());
// e = true;
// }
// catch (Exception ef) {
// System.out.println(ef);
// Toolkit.getDefaultToolkit().beep();
// JOptionPane.showMessageDialog(null, "Ungültige User-ID!", "Fehler!", JOptionPane.ERROR_MESSAGE);
// e = false;
// fe.user.setText("");
// fe.pw.setText("");
// }
// if (e == true)
// {
// if (personen[tmpi].getPassword().equals(fe.pw.getText()))
// {
// eingeloggt = true;
// AbfrageExit();
// } else
// {
// System.out.println(fe.pw.getText());
// JOptionPane.showMessageDialog(null, "Falsches Passwort!", "Fehler!", JOptionPane.ERROR_MESSAGE);
// fe.pw.setText("");
// eingeloggt = false;
// }
// }
// } else
// {
// JOptionPane.showMessageDialog(null, "Ungültige User-ID!", "Fehler!", JOptionPane.ERROR_MESSAGE);
// fe.user.setText("");
// fe.pw.setText("");
// }
}
if (tmp.startsWith("cexit")) break;
System.out.println(tmp);
}
System.out.println(socket.getRemoteSocketAddress()+" Verbindung zu Client getrennt");
socket.close();
} catch (IOException e) {
System.err.println("Fehler: "+e.toString());
}
}
} // Ende der Klasse
Und dazu habe ich einen Client:
Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.net.*;
public class SpardoseClient extends JFrame implements ActionListener
{
private JMenuItem neuItem, logoutItem, exitItem;
private static JPanel einPanel, einPanel2, einPanel3;
private Spardose sp;
private Spardose_zeichnen sz;
private String zeile = "", zeile2 = "", pfad = "", datein = "", tmp = "";
private KundenAuslesen ka;
private static Dimension d;
private static SpardoseClient fe;
private JButton bestaetigenButton, exitButton;
private JTextField user, pwf;
//private JPasswordField pwf;
private String usert, pwt;
private JButton bestaetigen1Button, bestaetigen2Button;
private JLabel kontostandtext, kontostand2text;
private JTextField kontostand;
private JLabel bestaetigen1text, bestaetigen2text;
private JTextField bestaetigen1, bestaetigen2;
private double geld;
private int tmpi = 0;
private Person[] personen;
private boolean e = true, eingeloggt = false;
private JMenuBar menuBar;
private JMenu dateiMenu;
private PrintWriter pw;
// Konstruktor, alles was man für die Initialisierung benötigt hier hinein!!
public SpardoseClient() throws Exception
{
Console eingabeTastatur = System.console();
Socket server = new Socket("localhost", 4711);
InputStreamReader in = new InputStreamReader(server.getInputStream());
BufferedReader datenstromEinlesen = new BufferedReader(in);
OutputStreamWriter out = new OutputStreamWriter(server.getOutputStream());
pw = new PrintWriter(out, true);
setTitle("Virtuelle Spardose");
d = Toolkit.getDefaultToolkit().getScreenSize();
setSize(d.width, d.height); // Größe des Rahmens in Pixel
setDefaultCloseOperation(EXIT_ON_CLOSE); // Schließt den Rahmen
menuBar = new JMenuBar();
setJMenuBar(menuBar);
dateiMenu = new JMenu("Datei");
neuItem = new JMenuItem("Neuer Kunde");
neuItem.addActionListener(this);
logoutItem = new JMenuItem("Ausloggen");
logoutItem.addActionListener(this);
exitItem = new JMenuItem("Exit");
exitItem.addActionListener(this);
einPanel = new JPanel(); // Erzeugung der "Leinwand" für die Komponenten
einPanel.setLayout(null); // Keinen Layoutmanager verwenden
einPanel.setBackground(Color.GRAY);
einPanel2 = new JPanel(); // Erzeugung der "Leinwand" für die Komponenten
einPanel2.setLayout(null); // Keinen Layoutmanager verwenden
einPanel2.setBackground(Color.GRAY);
einPanel3 = new JPanel(); // Erzeugung der "Leinwand" für die Komponenten
einPanel3.setLayout(null); // Keinen Layoutmanager verwenden
einPanel3.setBackground(Color.GRAY);
user = new JTextField("", 10);
user.setDocument(new NumberDocument());
user.setEditable(true);
user.setText("");
user.setToolTipText("Hier ist ihr aktueller user!");
user.setBounds(49, 50, 100, 30);
pwf = new JTextField("", 10);
pwf.setDocument(new StringNumberDocument());
pwf.setEditable(true);
pwf.setText("");
pwf.setToolTipText("Hier ist ihr aktueller user!");
pwf.setBounds(151, 50, 100, 30);
bestaetigenButton = new JButton("OK"); // Erzeugung des Buttons
bestaetigenButton.setBounds(49, 100, 100, 30);
bestaetigenButton.setToolTipText("Klicke hier zum Berechnen!");
bestaetigenButton.addActionListener(this);
exitButton = new JButton("Abbrechen"); // Erzeugung des Buttons
exitButton.setBounds(151, 100, 100, 30);
exitButton.setToolTipText("Klicke hier zum Beenden!");
exitButton.addActionListener(this);
kontostandtext = new JLabel();
kontostandtext.setBounds((d.width-375)/2, 50, 250, 30);
kontostandtext.setFont(new Font("MS Sans Serif", Font.PLAIN, 18));
kontostandtext.setText("Aktueller Kontostand in Euro:");
kontostand = new JTextField("", 10);
kontostand.setDocument(new NegativeDoubleDocument());
kontostand.setEditable(false);
kontostand.setText(String.valueOf(geld));
kontostand.setToolTipText("Hier ist ihr aktueller Kontostand!");
kontostand.setBounds((d.width+125)/2, 50, 100, 30);
bestaetigen1Button = new JButton("Bestätigen"); // Erzeugung des Buttons
bestaetigen1Button.setBounds(d.width-200, 150, 140, 30);
bestaetigen1Button.setToolTipText("Klicke hier zum Berechnen!");
bestaetigen1Button.addActionListener(this); // this ist eine Referenz auf die eigene Klasse
bestaetigen1 = new JTextField("", 10);
bestaetigen1.setDocument(new NegativeDoubleDocument());
bestaetigen1.setEditable(true);
bestaetigen1.setToolTipText("Bitte hier die einzuzahlenden Euros eingeben!");
bestaetigen1.setBounds((d.width+50)/2, 150, 50, 30);
bestaetigen1text = new JLabel();
bestaetigen1text.setBounds((d.width-250)/2, 150, 150, 30);
bestaetigen1text.setFont(new Font("MS Sans Serif", Font.PLAIN, 18));
bestaetigen1text.setText("Einzahlen Euro:");
bestaetigen2Button = new JButton("Bestätigen"); // Erzeugung des Buttons
bestaetigen2Button.setBounds(d.width-200, 200, 140, 30);
bestaetigen2Button.setToolTipText("Klicke hier zum Beenden!");
bestaetigen2Button.addActionListener(this);
bestaetigen2 = new JTextField("", 10);
bestaetigen2.setDocument(new NegativeDoubleDocument());
bestaetigen2.setEditable(true);
bestaetigen2.setToolTipText("Bitte hier die einzuzahlenden Euros eingeben!");
bestaetigen2.setBounds((d.width+50)/2, 200, 50, 30);
bestaetigen2text = new JLabel();
bestaetigen2text.setBounds((d.width-250)/2, 200, 150, 30);
bestaetigen2text.setFont(new Font("MS Sans Serif", Font.PLAIN, 18));
bestaetigen2text.setText("Auszahlen Euro:");
kontostand2text = new JLabel();
kontostand2text.setBounds((d.width-250)/2, 200, 250, 30);
kontostand2text.setFont(new Font("MS Sans Serif", Font.PLAIN, 18));
kontostand2text.setText("");
sz = new Spardose_zeichnen(kontostand2text, d, geld);
sz.setBounds(0, 350, d.width, d.height);
einPanel.add(kontostandtext);
einPanel.add(kontostand);
einPanel.add(kontostand2text); // den Button auf die "Leinwand" packen
einPanel.add(bestaetigen2text); // den Button auf die "Leinwand" packen
einPanel.add(bestaetigen2);
einPanel.add(bestaetigen2Button);
einPanel.add(bestaetigen1text); // den Button auf die "Leinwand" packen
einPanel.add(bestaetigen1);
einPanel.add(bestaetigen1Button);
einPanel.add(sz);
einPanel2.add(user);
einPanel2.add(pwf);
einPanel2.add(bestaetigenButton); // den Button auf die "Leinwand" packen
einPanel2.add(exitButton); // den Button auf die "Leinwand" packen
sp = new Spardose();
menuBar.add(dateiMenu); // den Button auf die "Leinwand" packen
//add(einPanel2);
setVisible(true); // Zum Schluss das ganze sichtbar machen
setResizable(true);
}
public void Abfrage() {
fe.user.setText("");
fe.pwf.setText("");
fe.dateiMenu.add(neuItem);
fe.dateiMenu.add(exitItem);
fe.dateiMenu.remove(logoutItem);
fe.add(einPanel2);
fe.setBounds((d.width-300)/2,(d.height-300)/2,300,300);
fe.setResizable(false);
fe.setVisible(true);
}
public void Abfrageb() {
if ((!fe.user.getText().equals("")) && (!fe.pwf.getText().equals("")))
{
pw.println("kopen "+fe.user.getText()+" "+fe.pwf.getText());
}
}
public void AbfrageExit() {
fe.dateiMenu.remove(neuItem);
fe.dateiMenu.add(logoutItem);
fe.dateiMenu.add(exitItem);
fe.remove(einPanel2);
fe.setBounds(0,0,d.width, d.height);
fe.add(einPanel);
sz.setGeld(personen[tmpi].getMoney());
fe.kontostand.setText(String.valueOf(personen[tmpi].getMoney()));
fe.setResizable(false);
fe.setVisible(true);
}
public void Haupt() {
fe.add(einPanel);
fe.setBounds(0,0,d.width, d.height);
}
public void HauptExit() {
fe.remove(einPanel);
fe.setSize(d.width,d.height);
}
public void KundeNeu() {
}
public void KundeNeuExit() {
}
public static void main(String args[]) throws Exception
{
fe = new SpardoseClient();
fe.Abfrage();
}
public void actionPerformed(ActionEvent evt)
{
Object quelle = evt.getSource();
if(quelle == bestaetigenButton)
{
fe.Abfrageb();
}
if(quelle == exitButton)
{
pw.println("cexit");
beenden();
}
if(quelle == bestaetigen1Button)
{
sp.einzahlen(Double.parseDouble(bestaetigen1.getText()));
}
if(quelle == bestaetigen2Button)
{
sp.abziehen(Double.parseDouble(bestaetigen2.getText()));
}
if(quelle == exitItem)
{
beenden();
}
if(quelle == logoutItem)
{
fe.HauptExit();
fe.Abfrage();
}
}
public void beenden() {
//ks = new KundenSpeichern(pfad+"\\"+datein, personen.length, ka.getPersonen());
//ks.speichern();
System.exit(0);
}
}
Mein Problem ist ganz einfach:
Ich weiß nicht wie ich es realisieren soll. Also ich kann eine Verbindung vom Client auf den Server herstellen und Daten übertragen, aber ich weiß nicht wie ich es in die andere Richtung realisiert wird.
Kann mir jemand helfen?
Bzw. einen Tipp geben wie ich das machen soll?